本篇将介绍常见的三种数组去重方法(小技能三种以上)。
欢迎大家在评论区提供更优方法,不足之处望海涵!
一、数组遍历,借助临时数组存储
- 技能点
includes
方法判断数组是否包含某一指定的值,包含返回true,否则返回false。
- demo
function unique(arr) {
const newArr = []
for (let i = 0, len = arr.length; i < len; i++) {
// 这个地方可以使用indexOf()替代,远离是一样的
if (!newArr.includes(arr[i])) {
console.log(arr[i])
newArr.push(arr[i])
}
}
return newArr
}
const arr = [1, 2, 3, 2, 5, 6, 5]
const newArr = unique(arr)
console.log(newArr) // [1, 2, 3, 5, 6]
二、ES6 Set
- 技能点
Set
为ES6新增对象,它是值的集合,你可以按照插入的顺序迭代它的元素。Set
中的元素只会出现一次,即 Set 中的元素是唯一的。Array.from
方法从一个类似数组或可迭代对象创建一个新的,浅拷贝的数组实例。
- demo
function unique(arr) {
// 这个地方也可以使用ES6 扩展语法进行返回
// return [...new Set(arr)]
return Array.from(new Set(arr))
}
const arr = [1, 2, 3, 2, 5, 6, 5]
const newArr = unique(arr)
console.log(newArr) // [1, 2, 3, 5, 6]
三、splice删除
- 技能点
splice
方法通过删除或替换现有元素或者原地添加新的元素来修改数组,并以数组形式返回被修改的内容。此方法会改变原数组。关于数组方法学习,也可以移步到Javascript对象之【Array】进行交流学习。 - demo
function unique(arr) {
for (let i = 1; i < arr.length; i++) {
for (let j = i + 1; j < arr.length; j ++ ) {
if (arr[i] == arr[j]) {
arr.splice(j, 1)
}
}
}
return arr
}
const arr = [1, 2, 3, 2, 5, 6, 5]
const newArr = unique(arr)
console.log(newArr) // [1, 2, 3, 5, 6]