我有一个从$('.player').each(function()
生成的数组,如下所示:
["foo"]
["foo"]
["bar"]
["bar"]
["bar"]
["foo"]
["somethingelse"]
我希望此数组仅合并附近的值(前两个foo
但不是最后一个,因为索引上方和下方没有foo
:
["foo"]
["bar"]
["foo"]
["somethingelse"]
有人能指出我如何在数组中合并重复值(如果接近相同的值)的正确方向吗?
到目前为止,我唯一拥有的就是这个,但遗憾的是,无论它们是什么索引,它都会合并值。
var uniqueNames = [];
$.each(fruits, function(i, el){
if($.inArray(el, uniqueNames) === -1) uniqueNames.push(el);
});
console.log(uniqueNames);
编辑: 谢谢你的代码完美无瑕。仅仅据我所知,如果我想要将两个foos合并并重命名(如foo2)该怎么办?
答案 0 :(得分:0)
我猜你可以用纯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);

答案 1 :(得分:0)
您可以使用O(N)
中的直接纯JS进行此操作,如下所示:
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)