一、写在前面
说起数组去重我们都不陌生,但是基本每次就说出来一二种,现在把它总结一下,方便我的后续复习。
二、具体算法实现
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
}
有更好的解法,欢迎留言呀!