我有一组数字,我需要确保它们是唯一的。我在互联网上找到了下面的代码片段,它工作得很好,直到数组中有一个零。我在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数组中删除重复值
类似的问题:
获取数组中的所有非唯一值(即:重复/多次出现)
要删除重复项,可能有两种情况。首先,所有数据都不是对象,其次所有数据都是对象。
如果所有数据都是任何类型的原始数据类型,如int、float、string等,那么您可以遵循以下一种
const uniqueArray = [...new Set(oldArray)]
但假设您的数组包含以下JS对象
{
id: 1,
name: 'rony',
email: 'rony@example.com'
}
然后,要获取所有唯一的对象,可以执行以下操作
let uniqueIds = [];
const uniqueUsers = oldArray.filter(item => {
if(uniqueIds.includes(item.id)){
return false;
}else{
uniqueIds.push(item.id);
return true;
}
})
您也可以使用此方法使任何类型的数组成为唯一的。只需将跟踪键保留在uniqueIds数组上。
要删除重复项,可能有两种情况。首先,所有数据都不是对象,其次所有数据都是对象。
如果所有数据都是任何类型的原始数据类型,如int、float、string等,那么您可以遵循以下一种
const uniqueArray = [...new Set(oldArray)]
但假设您的数组包含以下JS对象
{
id: 1,
name: 'rony',
email: 'rony@example.com'
}
然后,要获取所有唯一的对象,可以执行以下操作
let uniqueIds = [];
const uniqueUsers = oldArray.filter(item => {
if(uniqueIds.includes(item.id)){
return false;
}else{
uniqueIds.push(item.id);
return true;
}
})
您也可以使用此方法使任何类型的数组成为唯一的。只需将跟踪键保留在uniqueIds数组上。
如前所述,[…new Set(value)]是最好的选项,如果您可以使用的话。
否则,这里有一个单行程序,它不会为每个索引迭代数组:
values.sort().filter((val, index, arr) => index === 0 ? true : val !== arr[index - 1]);
这只是将每个值与前面的值进行比较。结果将被排序。
例子:设值=[1,2,3,3,4,5,5,4,4,3,1,1,3,3];let unique=values.sort().filter((val,index,arr)=>索引==0?真:val!==arr[索引-1]);console.log(唯一);