2016-12-21 7 views
1

私はこのようになります$('.player').each(function()から生成されたアレイがあります。私は、この配列は、最初の2つ(だけ近くの値をマージしたいと思いますはJavaScriptを使用して配列内の近くの重複した値をマージ

["foo"] 
["foo"] 
["bar"] 
["bar"] 
["bar"] 
["foo"] 
["somethingelse"] 

を無fooのそのインデックスの上方と下方があるのでfooのではなく、最後の1):

["foo"] 
["bar"] 
["foo"] 
["somethingelse"] 

誰もが同じ値に近い場合以内)(重複した値をマージする方法については正しい方向に私を指すことができますアレイ?

これまでのところ、これは唯一のものですが、悲しいことに、どのインデックスに関係なく値がマージされます。

var uniqueNames = []; 
$.each(fruits, function(i, el){ 
    if($.inArray(el, uniqueNames) === -1) uniqueNames.push(el); 
}); 
console.log(uniqueNames); 

EDIT: コードは問題なく機能します。私の知る限り、2つのfoosをマージしてfoo2という名前に変更したいのですが?

+3

'var uniqueNames = fruits.filter((value、index、array)=>!index ||値!==配列[インデックス-1]); ' – Thomas

+0

@トーマス、これは正しい答えです – Sebas

+0

私のおかげで、それは動作します。あなたは私に頭痛を救った。どうもありがとうございます ! – pawndev

答えて

0

で次のようにあなたが行うことが推測:

var RemoveDuplicates = function(arr){ 
 
    if(arr.length<2)    //Array is too short to have duplicates 
 
    return arr 
 
    var ret = [arr[0]]    //First item cannot be a duplicate 
 
    for(var i=1;i<arr.length;i++){ //Loop over all other items 
 
    if(arr[i-1]!=arr[i])   //If previous item is the same, ignore this item 
 
     ret.push(arr[i]);   //Previous item was different, so keep current 
 
    } 
 
    return ret; 
 
} 
 

 
arr = ["foo","foo","bar","bar","bar","foo","somethingelse"] 
 
arr = RemoveDuplicates(arr) 
 
console.log(arr)

0

私は次のようにあなたがO(N)でストレートフォワード、純粋なJSでこれを行うことができ、純粋なJS

var arrs = [["foo"],["foo"],["bar"],["bar"],["bar"],["foo"],["somethingelse"]], 
 
    result = arrs.reduce((p,c,i,a) => i ? c[0] !== a[i-1][0] ? (p.push(c),p) : p 
 
             : (p.push(c),p),[]); 
 
console.log(result);

関連する問題