我需要检查一个JavaScript数组,看看是否有重复的值。最简单的方法是什么?我只需要查找重复的值是什么-我实际上不需要它们的索引或它们被重复多少次。
我知道我可以遍历数组并检查所有其他值是否匹配,但是似乎应该有一种更简单的方法。
我需要检查一个JavaScript数组,看看是否有重复的值。最简单的方法是什么?我只需要查找重复的值是什么-我实际上不需要它们的索引或它们被重复多少次。
我知道我可以遍历数组并检查所有其他值是否匹配,但是似乎应该有一种更简单的方法。
这应该是在数组中实际查找重复值的最短方法之一。正如OP明确要求的那样,这不会删除重复项,而是会找到它们。
var input = [1, 2, 3, 1, 3, 1];
var duplicates = input.reduce(function(acc, el, i, arr) {
if (arr.indexOf(el) !== i && acc.indexOf(el) < 0) acc.push(el); return acc;
}, []);
document.write(duplicates); // = 1,3 (actual array == [1, 3])
这不需要排序或任何第三方框架。它也不需要手动循环。它可以与indexOf()的每个值一起使用(或更清楚:严格的比较运算符)支持。
由于reduce()和indexOf(),因此至少需要IE 9。
如果要消除重复项,请尝试以下出色的解决方案:
function eliminateDuplicates(arr) {
var i,
len = arr.length,
out = [],
obj = {};
for (i = 0; i < len; i++) {
obj[arr[i]] = 0;
}
for (i in obj) {
out.push(i);
}
return out;
}
资料来源:http : //dreaminginjavascript.wordpress.com/2008/08/22/eliminate-duplicates/
更新:简短的一线以获得重复:
要获得没有重复的数组,只需将条件反转即可:
我只是
filter()
在下面的旧答案中没有考虑过;)当您只需要检查是否存在此问题所要求的重复项时,可以使用以下
every()
方法:请注意,该
every()
功能不适用于IE 8及更低版本。