假设我们有一个数组:
let arr = [10,10,5,11,5]
如何检查所有相等的数字? (基本上是重复的)
我想到的是forEach并比较每个数字,但这并不是很理想。过滤器?也许。任何人都有最佳的理想想法?
答案 0 :(得分:0)
您可以使用reduce
来构建所需的值
let arr = [10, 10, 5, 11, 5];
let duplicates = getDuplicates(arr);
console.log(duplicates);
function getDuplicates(arr) {
let duplicates = arr.reduce((acc, item) => {
if(acc[item] !== undefined) {
acc[item] = true;
} else {
acc[item] = false;
}
return acc;
}, {});
return Object.keys(duplicates).filter(item => duplicates[item]);
}
答案 1 :(得分:0)
您可以使用过滤器
let arr = [10,10,5,11,5];
const duplicates = array => array.filter((item, index) => array.some((i, idx) => i === item && idx < index));
console.log(duplicates(arr));
或减少
let arr = [10,10,5,11,5];
const duplicates = array => array.reduce((results, item, index) => {
if (!results.some(i => i === item) && array.some((i, idx) => i === item && index !== idx)) {
results.push(item);
}
return results;
}, []);
console.log(duplicates(arr));
答案 2 :(得分:-1)
您可以使用Set删除重复项,然后比较两个数组的长度。
let arr1 = [10,10,5,11,5]
let arr2 = [10,11,5]
function hasDuplicates(arr) {
return arr.length != [...new Set(arr)].length
}
console.log(hasDuplicates(arr1))
console.log(hasDuplicates(arr2))
答案 3 :(得分:-1)
使用every
很快
let arr = [10,10,5,11,5]
//arr = [10,10,10,10]
if (arr.every( v => v === arr[0] )) {
console.log("yes")
} else {
console.log("no")
}
或使用Lodash
let arr = [10,10,5,11,5]
//arr = [10,10,10,10]
if (_.uniq(arr).length == 1) {
console.log("yes")
} else {
console.log("no")
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>