mark一些我常用的數組去重的方法
1、set方法
const arr = [1,2,3,1,1,2,3,4,2,1,2,3,4,4,2,2,1,2,3,4]
function reset (arr) {
return Array.from(new Set(arr))
}
let Arr = reset(arr)
console.log(Arr) // [1, 2, 3, 4]
Set類似於數組,區別在於它所有的成員都是唯一的,不能有重複的值
2、for循環遍歷
const arr = [1,2,3,1,1,2,3,4,2,1,2,3,4,4,2,2,1,2,3,4]
for(let i = 0;i<arr.length;i++) {
for(let j = i+1;j<arr.length;j++) {
if (arr[i] === arr[j]) {
arr.splice(j, 1)
j--
}
}
}
兩層for循環 比較arr[i]到 arr[i+1~arr.length] 相同即splice(i+1, 1)去重
3、利用IndexOf去重
const arr = [1,2,3,1,1,2,3,4,2,1,2,3,4,4,2,2,1,2,3,4]
let Arr = []
for(let i = 0; i<arr.length;i++){
if (Arr.indexOf(arr[i]) === -1) {
Arr.push(arr[i])
}
}
indexOf()方法如果找不到就會返回-1
4、sort()排序去重
let arr = [1,2,3,1,1,2,3,4,2,1,2,3,4,4,2,2,1,2,3,4]
arr = arr.sort()
let Arr = []
for(let i = 0; i<arr.length; i++) {
if (arr[i] !== arr[i+1]) {
Arr.push(arr[i])
}
}
先使用sort方法排序好數組。然後比較數組的前後兩項是否相同
5、利用includes方法
const arr = [1,2,3,1,1,2,3,4,2,1,2,3,4,4,2,2,1,2,3,4]
let Arr = []
for(let i = 0; i<arr.length;i++){
if (!Arr.includes(arr[i])) {
Arr.push(arr[i])
}
}
同indexOf方法。includes方法用戶檢測數組是否存在傳入的值,存在返回true
6、利用filter方法
const arr = [1,2,3,1,1,2,3,4,2,1,2,3,4,4,2,2,1,2,3,4]
let Arr = arr.filter((item, i, self) => self.indexOf(item, 0) === i)
filter是es6的過濾數組的方法,使用filter結合indexOf方法能比較有效的去重
還有其他很多種數組去重方式就不一一列舉了,總之靈活善用方法總會有最優去重法;
一些方法參考了這位大佬的總結,更多請看這位大佬的文章 ==>地址
…end