例如,从数组
中删除值2[1, 2, 3, 2, 4]
应该产生结果
[1, 3, 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);