九州编程
您需要在外循环中迭代,直到最后一项之前的元素和内循环中从实际索引加一开始,以防止检查相同的元素。如果发现重复,将值推送到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);使用更短的方法 Setvar 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);
慕莱坞森
您还可以将 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)。