javascript - 删除重复项无法按预期工作

标签 javascript arrays

我正在尝试使用以下函数扩展数组原型(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/

相关文章:

javascript - 使用 lodash 根据类型对多个对象进行分组

java - 如何使用键和值创建json对象,其中值是数组

C、字符数组,错误: subscripted value is neither array nor pointer nor vector?

java - 在java中获取链表中的对象与数组中的对象

javascript - 获取 json 数据时 jquery 有问题

javascript - 如何使用react-native-vision-camera代替expo-camera?

javascript - 平滑的路由链接消除了 Electron 中的基本路径

javascript - 所有属性都设置为最后一个循环迭代值[为什么?]

javascript - JQuery 突然不工作了

javascript - 搜索变量