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)
。
添加回答
舉報