數(shù)組去重的方法
面試題中會經常問到數(shù)組去重問題,今天就簡單梳理一些數(shù)據(jù)去重比較簡單容易理解的方法!
1.利用Set數(shù)據(jù)去重
Set是Es6中為我們提供的數(shù)據(jù)結構,它類似于數(shù)組暇咆,但是具有唯一性,其中成員的值都是唯一的丙曙,沒有重復的值糯崎,所以經常用作數(shù)組去重。
var arr = [1,2,3,1,2,3]
arr = Array.from(new(arr))
console.log(arr) //[1,2,3]
2.利用indexOf去重
indexOf()方法可返回某個指定的字符串值在字符串中首次出現(xiàn)的位置河泳,如果沒有則返回-1沃呢。
var arr=[1,2,3,1,2,3]
var brr = []//創(chuàng)建新數(shù)組接受值
for(let i=0;i<arr.length;i++){
//在brr數(shù)組中查找arr數(shù)組中的每一項们拙,如果沒有找到則返回-1走搁,并把這個值放入brr當中
if(brr[i].indexOf(arr[i]) === -1){
brr.push(arr[i])
}
}
console.log(brr)//[1,2,3]
3.雙重for循環(huán)去重
var arr = [1,2,3,1,2,3]
for (let i = 0; i < arr.length - 1; i++) { // 這里arr.length沒有放到循環(huán)開始時定義是因為數(shù)組的長度可能會發(fā)生改變业舍,需要避免一些沒有意義的循環(huán)
for (let j = i + 1; j < arr.length; j++) {
if (arr[i] === arr[j]) {
arr.splice(j, 1) // 注意:splice方法是會改變原數(shù)組的這里每次刪除完一個元素之后敷鸦,后面的元素都會往前移一位
j-- // 因為下次循環(huán)前j要自增分瘾,如果現(xiàn)在j不自減的話丑蛤,那么下次遍歷的時候就會跳過一個要審查的元素
}
}
}
console.log(arr);
4.sort排序后去重
sort方法先將數(shù)組進行從小到大排序梅桩,然后篩選重復的數(shù)值(這個方法只能排序數(shù)字茸炒,字符串會出現(xiàn)bug汉矿,不推薦使用)
var arr=[1,2,3,1,2,3]
arr = arr.sort() //arr[1,1,2,2,3,3]
var brr=arr[0]
for(let i=1;i<arr.length;i++){
if(arr[i] !==arr[i-1]){
brr.push(arr[i]);
}
}
console.log(brr)//[1,2,3]
5.forEach循環(huán)遍歷數(shù)組
利用forEach循環(huán)遍歷原數(shù)組崎坊,當值判斷出不在新數(shù)組中時就將該值放入新數(shù)組中
var arr = [1, 2, 3, 1,2,3]
var newArr = []
arr.forEach((item, index) => {
if (!newArr.includes(item)) { // includes方法用于判斷元素是否存在于數(shù)組中,如果存在則返回true洲拇,否則返回false
newArr.push(item)
}
})
console.log(newArr);//[1,2,3]
數(shù)組去重還有很多方法奈揍,今天樓主梳理了常用的、簡單的幾種去重方法赋续,喜歡就點個贊哦男翰!