开发者社区> 问答> 正文

获取JavaScript数组中的所有唯一值(删除重复项)

我需要确定一个唯一的数字数组。我在互联网上找到了下面的代码片段,并且在数组中包含零之前,它都可以正常工作。我在Stack Overflow上的这里找到了另一个脚本,看起来几乎完全一样,但是它不会失败。

因此,为了帮助我学习,有人可以帮助我确定原型脚本出了什么问题吗?

Array.prototype.getUnique = function() { var o = {}, a = [], i, e; for (i = 0; e = this[i]; i++) {o[e] = 1}; for (e in o) {a.push (e)}; return a; }

展开
收起
保持可爱mmm 2020-01-08 17:17:12 502 0
1 条回答
写回答
取消 提交回答
  • 使用JavaScript 1.6 / ECMAScript 5,您可以通过filter以下方式使用Array 的本机方法来获取具有唯一值的数组:

    function onlyUnique(value, index, self) { return self.indexOf(value) === index; }

    // usage example: var a = ['a', 1, 'a', 2, '1']; var unique = a.filter( onlyUnique ); // returns ['a', 1, 2, '1']

    本机方法filter将遍历数组,仅保留那些通过给定回调函数的条目onlyUnique。

    onlyUnique检查给定值是否是第一个出现。如果不是,它必须是重复的,并且不会被复制。

    此解决方案无需任何额外的库(如jQuery或prototype.js)即可工作。

    它也适用于具有混合值类型的数组。

    对于旧版浏览器(<ie9),它们不支持本机方法filter,indexOf您可以在MDN文档中找到关于filter和indexOf的解决方法。

    如果要保留最后一次出现的值,请简单地替换indexOf为lastIndexOf。

    使用ES6可以简化为:

    // usage example: var myArray = ['a', 1, 'a', 2, '1']; var unique = myArray.filter((v, i, a) => a.indexOf(v) === i);

    // unique is ['a', 1, 2, '1']

    感谢Camilo Martin的评论提示。

    ES6有一个本地对象Set来存储唯一值。要获得具有唯一值的数组,您现在可以执行以下操作:

    var myArray = ['a', 1, 'a', 2, '1'];

    let unique = [...new Set(myArray)];

    // unique is ['a', 1, 2, '1']

    的构造函数Set采用一个可迭代的对象(例如Array),并且散布运算符...将集合转换回Array。

    问题来源于stack overflow

    2020-01-08 17:17:33
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
JavaScript函数 立即下载
Delivering Javascript to World 立即下载
编程语言如何演化-以JS的private为例 立即下载