如何在Javascript中删除数组中多个出现的元素?

时间:2016-10-29 10:07:22

标签: javascript arrays

例如,从数组

中删除值2
[1, 2, 3, 2, 4]

应该产生结果

[1, 3, 4]

如果我使用过滤器,它只会删除第二次和后续的事件,这不是我想要的。

应该完全删除多次出现的所有值。

4 个答案:

答案 0 :(得分:2)

您可以使用filter()执行此操作,并仅返回具有相同indexOf()lastIndexOf()

的元素



var data = [1, 2, 3, 2, 4, 1, 1];

var result = data.filter(function(e) {
  return data.indexOf(e) == data.lastIndexOf(e);
});

console.log(result)




答案 1 :(得分:1)

如果您之前对数组进行排序,那么您需要删除与其邻居相同的元素:

var input = [1, 2, 3, 2, 4, 5, 6, 5 , 5, 1];
var result = input.sort().filter((x,i,arr) => x !== arr[i+1] && x !== arr[i-1]));
console.log(result); // [3, 4, 6 ]

答案 2 :(得分:1)

最简单的解决方案可能只是保留多次出现的任何已找到项目的地图,并始终删除过滤器中的项目



var arr = [1, 2, 3, 2, 4];
var map = [];

var filtered = arr.filter(function(item, index) {
    if (arr.lastIndexOf(item) !== index) map.push(item);
    return  map.indexOf(item) === -1;
});

console.log(filtered)




答案 3 :(得分:0)

没有排序的提案。



var data = [1, 2, 3, 2, 4],
    filtered = data.filter(function (a) {
        return this[a] === 1;
    }, data.reduce(function (r, a) {
        r[a] = (r[a] || 0) + 1;
        return r;
    }, {}));

console.log(filtered);