2 回答
TA贡献1785条经验 获得超4个赞
您需要在外循环中迭代,直到最后一项之前的元素和内循环中从实际索引加一开始,以防止检查相同的元素。
如果发现重复,将值推送到duplicates数组。
var array = [15, 22, 88, 65, 79, 19, 93, 15, 90, 38, 77, 10, 22, 90, 99],
len = array.length,
i, j,
duplicates = [];
for (i = 0; i < len - 1; i++) {
for (j = i + 1; j < len; j++) {
if (array[i] === array[j]) duplicates.push(array[i]);
}
}
console.log(duplicates);
使用更短的方法 Set
var array = [15, 22, 88, 65, 79, 19, 93, 15, 90, 38, 77, 10, 22, 90, 99],
found = new Set,
duplicates = array.filter(v => found.has(v) || !found.add(v));
console.log(duplicates);
TA贡献1810条经验 获得超4个赞
您还可以将 Set与Array.filter和Array.indexOf 一起使用:
let data = [15,22,88,65,79,19,93,15,90,38,77,10,22,90,99]
let r = new Set(data.filter((v, i, a) => a.indexOf(v) !== i))
console.log(Array.from(r))
这个想法是将项目过滤到找到多个索引的项目,然后将它们添加到集合中。由于 Set 仅存储唯一项目,因此它会处理重复项并获得最终结果。
我们利用 Array.filter 为 iteratee 函数提供 3 个参数 - value (v)
,当前index (i)
和实际的事实array (a)
。
添加回答
举报