2 回答

TA貢獻(xiàn)1785條經(jīng)驗(yàn) 獲得超4個(gè)贊
您需要在外循環(huán)中迭代,直到最后一項(xiàng)之前的元素和內(nèi)循環(huán)中從實(shí)際索引加一開始,以防止檢查相同的元素。
如果發(fā)現(xiàn)重復(fù),將值推送到duplicates數(shù)組。
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貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超4個(gè)贊
您還可以將 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))
這個(gè)想法是將項(xiàng)目過濾到找到多個(gè)索引的項(xiàng)目,然后將它們添加到集合中。由于 Set 僅存儲(chǔ)唯一項(xiàng)目,因此它會(huì)處理重復(fù)項(xiàng)并獲得最終結(jié)果。
我們利用 Array.filter 為 iteratee 函數(shù)提供 3 個(gè)參數(shù) - value (v)
,當(dāng)前index (i)
和實(shí)際的事實(shí)array (a)
。
添加回答
舉報(bào)