function duplicates(arr) {
var temp = arr.filter(function(item,i){
return arr.indexOf(item)!== i;
})
return temp
}
//輸入[1, 2, 4, 4, 3, 3, 1, 5, 3]
//輸出[1,3,3,4]
該方法可以查詢重復(fù)元素,但元素重復(fù)次數(shù)超過兩次以上就會(huì)輸出多個(gè)重復(fù)元素
1、使用 reduce 和 includes
function unique(array) {
return array.reduce(function (pre, item) {
return pre.includes(item) ? pre : pre.concat(item);
}, []);//第二個(gè)參數(shù)為[ ]要設(shè)置初始值,不然會(huì)從index1開始遍歷
}
var array = [1, 5, 2, 3, 4, 2, 3, 1, 3, 4];
unique(array);
2、使用 set 去重
var array = [1, 5, 2, 3, 4, 2, 3, 1, 3, 4];
var newArr = [...new Set(array)];
console.log(newArr); //[1, 5, 2, 3, 4]
3、使用map去重
function unique (arr) {
let map = new Map()
let array = new Array() // 數(shù)組用于返回結(jié)果
for (let i = 0; i < arr.length; i++) {
if (map.has(arr[i])) { // 如果有該key值
map.set(arr[i], true)
} else {
map.set(arr[i], false) // 如果沒有該key值
array.push(arr[i])
}
}
return array
}
var array = [1, 5, 2, 3, 4, 2, 3, 1, 3, 4];
unique(array);
補(bǔ)充關(guān)于reduce用法
array.reduce(callback, [initialValue])
array.reduce((previousValue, currentValue, index, array) => { }, [initialValue])
其中 callback 函數(shù)有四個(gè)參數(shù)
- previousValue (上一次調(diào)用回調(diào)返回的值,或者是提供的初始值(initialValue))
- currentValue (數(shù)組中當(dāng)前被處理的元素)
- index (當(dāng)前元素在數(shù)組中的索引)
- array (調(diào)用 reduce 的數(shù)組)
initialValue 為可選參數(shù),第一次調(diào)用 callback 函數(shù)時(shí)的初始值,注意 如果不設(shè)置 initialValue,reduceh 會(huì)從索引 index 1 的開始執(zhí)行,如果設(shè)置初始值 從索引 0 開始
未設(shè)置初始值index始終從1開始.png
數(shù)組去重正確用法.png

