我正在尝试使用以下函数扩展数组原型(prototype):
Array.prototype.uniqueItems=function(){
var ar=this,unique=[],max=ar.length;
for(var i = 0 ; i < max;i++)
if(unique.indexOf(ar[i] )==-1)
unique.push(ar[i]);
return unique;
};
Array.prototype.removeDuplicates=function(){
var self = this;
self = this.uniqueItems();
return self;
};
第一个函数应该返回一个没有重复项的数组,第二个函数应该从给定数组中删除所有重复项。 考虑以下代码:
var x=[1,1,1,1,2,2,2,2,3,3,3,3,4,4];
x.removeDuplicates();
console.log(x);
输出是:
[ 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4 ]
所以重复项仍然存在。有什么想法吗?提前致谢!!!还请注意,我不能使用 x= x.uniqueItems()
因为它仅适用于 x。我希望它适用于任何给定的数组。
最佳答案
你不妨在 ES6 中这样做
var x = [1,1,1,1,2,2,2,2,3,3,3,3,4,4],
u = a => Array.from(new Set(a)),
y = u(x);
console.log(y);
新的Set object在 ES6 中,获取元素并只保留每个元素中的一个并丢弃重复的元素。因此,这是获得独特元素的理想方式。一个新的 set 对象由 Set 构造函数实例化,它将接受一个项目数组作为参数,例如 var s = new Set([1,1,2,1,4,3,6,7,4,5,6,9,8,1,2,3,4,7,0])
以及由此产生的 s
set 将由 1、2、4、3、6、7、5、9、8 和 0 按出现顺序排列的唯一条目组成。 Set 对象具有生成器属性和可以从中获取的迭代器函数。因此[...s]
(ES6 扩展运算符)或 Array.from(s)
将自动产生一个正确的唯一项目数组。
关于javascript - 删除重复项无法按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38009393/