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

How to remove all occurrences of a multiple occurring element in an array in Javascript?

本文关键字:元素 Javascript 删除 数组      更新时间:2023-09-26

例如,从数组

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

应该产生结果

[1, 3, 4]

如果我使用过滤器,它只会删除第二次及之后的出现,这不是我想要的。

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

您可以对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)

最简单的解决方案可能只是保留多次出现的所有发现项的映射,并始终在过滤器

中删除它们。

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)

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

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 ]

不排序的提案

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);