一、寫在前面
說起數組去重我們都不陌生,但是基本每次就說出來一二種,現在把它總結一下,方便我的後續複習。
二、具體算法實現
1、使用ES6新的數據結構,set它是不包含重複值的,但是要轉化爲數組,通過Array.from或者使用拓展運算符
function unique4(arr) {
return Array.from(new set(arr))
}
2、使用indexof (返回第一個出現的下標,若沒有返回-1)
function unique(arr) {
var newArr = []
for (let i = 0; i < arr.length; i++) {
if (newArr.indexOf(arr[i]) === -1) {
newArr.push(arr[i])
}
}
return newArr
}
3、將數組排序後,依次比較前後的數字是否相等,不相等的push進新數組
function unique1(arr) {
var sortArr = arr.sort()
var newArr = []
for (let i = 0; i < arr.length; i++) {
if ((sortArr[i] !== sortArr[i - 1])) {
newArr.push(sortArr[i])
}
}
return newArr;
}
4、使用新的ES6特性includes,如果包含的話,返回true,
function unique2(arr) {
var newArr = []
for (let i = 0; i < arr.length; i++) {
if (!newArr.includes(arr[i])) {
newArr.push(arr[i])
}
}
}
5、使用foreach來進行遍歷
function unipue5() {
const newarr = []
this.forEach((item) => {
if (!newarr.includes(item)) {
newarr.push(item)
}
})
return newarr
}
6、使用filter進行判斷過濾
function unique(arr) {
var newarr = []
newarr = arr.filter(function(item) {
return newarr.includes(item) ? '' : newarr.push(item)
})
return newarr
}
7、使用map
function unique8() {
const tmp = new Map()
const newarr = []
for (let i = 0; i < arr.length; i++) {
if (!tmp.has(arr[i])) {
tmp.set(arr[i], 1)
newarr.push(arr[i])
}
}
}
8、使用對象的特性
function unique3(arr) {
var obj = {}
var newArr = []
for (let i = 0; i < arr.length; i++) {
if (!obj[arr[i]]) {
obj[arr[i]] = 1
newArr.push(arr[i])
}
}
return newArr
}
有更好的解法,歡迎留言呀!