我有一组数字,我需要确保它们是唯一的。我在互联网上找到了下面的代码片段,它工作得很好,直到数组中有一个零。我在 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;
}
来自重复问题的更多答案:
类似的问题:
原文由 Mottie 发布,翻译遵循 CC BY-SA 4.0 许可协议
使用 JavaScript 1.6 / ECMAScript 5 ,您可以通过以下方式使用数组的本机
filter
方法来获取具有唯一值的数组:本机方法
filter
将遍历数组并只留下那些通过给定回调函数onlyUnique
的条目。onlyUnique
检查给定值是否是第一个出现的值。如果不是,它必须是重复的,不会被复制。此解决方案无需任何额外的库(如 jQuery 或原型.js)即可工作。
它也适用于具有混合值类型的数组。
对于不支持原生方法filter 和 indexOf 的变通方法。
filter
和indexOf
的旧浏览器 (如果要保留最后一次出现的值,只需将
indexOf
替换为lastIndexOf
。使用 ES6,这可以缩短为:
感谢 Camilo Martin 的评论提示。
ES6 有一个原生对象
Set
来存储唯一值。要获取具有唯一值的数组,您现在可以这样做:Set
的构造函数接受一个可迭代的对象,比如一个数组,而扩展运算符...
将集合转换回一个数组。感谢 Lukas Liese 的评论提示。