在JavaScript中有条件地删除数组中的重复项

时间:2017-02-20 22:09:52

标签: javascript arrays

我试图在JavaScript中删除数组中的重复项。给定的数组是

resultant_array = [1,2,3,1,2]

array = [1,1,1,1,1,1,1,1,1,1,1,1]

此处第二个1不被视为重复

OR

resultant_array = [1]

<body> <div class="navigation>...</div> <div class="container other-content"></div> </body>

我怎么能做到这一点的任何想法

3 个答案:

答案 0 :(得分:1)

您可以像这样使用reduce

var array = [1,1,1,1,1,1,1,1,1,,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,1,1,1,1,1,2,2,2,2,2,2,22];

var result = array.reduce(function(r, e) {
  if(r[r.length - 1] != e) // if the last element in the result is not equal to this item, then push it (note: if r is empty then r[-1] will be undefined so the item will be pushed as any number is != undefined)
    r.push(e);
  return r;
}, []);

console.log(result);

答案 1 :(得分:1)

var arr = [1,1,2,2,3,3];
var obj = {};
for(var i in arr) {
   obj[arr[i]] = true;
}
var result = [];
for(var i in obj) {
   result.push(i);
}

我将对象的键设置为数组的值,并且不能具有相同值的多个键。然后我把所有的钥匙都放在了结果中。

答案 2 :(得分:1)

您可以使用Array#reduce

检查前一个

var array = [1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2],
    result = array.reduce(function (r, a) {
        return r[r.length - 1] === a ? r : r.concat(a);
    }, []);
    
console.log(result);

或者使用Array#filter和一个对象作为最后一个值。

var array = [1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2],
    result = array.filter(function (a, i, aa) {
        return this.last !== a && (this.last = a, true);
    }, { last: undefined });
    
console.log(result);