我有一组数字,我需要确保它们是唯一的。我在互联网上找到了下面的代码片段,它工作得很好,直到数组中有一个零。我在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;
}
重复问题的更多答案:
从JS数组中删除重复值
类似的问题:
获取数组中的所有非唯一值(即:重复/多次出现)
[...new Set(duplicates)]
这是从MDN Web文档中引用的最简单的一个。
const numbers = [2,3,4,4,2,3,3,4,4,5,5,6,6,7,5,32,3,4,5]
console.log([...new Set(numbers)]) // [2, 3, 4, 5, 6, 7, 32]
一种可扩展、快速、高效且易于阅读的现代方法,使用iter ops库:
import {pipe, distinct} from 'iter-ops';
const input = [1, 1, 2, 2, 2, 3]; // our data
const i = pipe(input, distinct()); // distinct iterable
console.log([...i]); //=> [1, 2, 3]
如果您的输入是一个对象数组,则只需为不同的运算符提供一个键选择器。
有时我需要从对象数组中获取唯一的引用。Lodash似乎是一个很好的助手,但我不认为过滤数组就可以为项目添加依赖项。
让我们假设在比较一个属性(例如id)时两个对象的姿势。
常量a=〔{id:3},{id:4}、{id:30}和{id:5}〕;
既然我们都喜欢一行代码片段,下面是如何做到这一点:
a.reduce((acc,curr)=>acc.find(e=>e.id==curr.id)?acc:[…acc,curr],[])