大家好,我是梅巴哥er
。数组去重,是个经常提到的话题。那么,是否可以搞一个去重函数,随用随取呢?
封装之前,我们先来看下,普通的去重该怎么去做。
假如有这个一个数组,var arr1 = [1, 2, 3, 3, 2]
,想得到它的去重后的数组,要怎么做呢?
我的思路是:
- 先声明一个空数组arr = [ ],
- 再对数组arr1进行遍历
- 取arr1中的元素1,和arr中的元素进行比较
- 看下arr中是否有1了
- 如果有了,就不操作。继续拿arr1中的元素2跟arr中的元素进行比较
- 如果没有,就把1放进arr数组里。
- 依次类推,然后输出。
按照这个思路,我们写一下代码:
var arr1 = [1, 2, 3, 3, 2]
var arr = [] // 声明空数组arr
// 用map对arr1遍历,v是arr1的元素,k是元素对应的索引号
arr1.map((v, k) => {
// ||或符号用于判断。前者为真,不操作。前者为假,执行后者。
arr.includes(v) || arr.push(v)
})
console.log(arr)
// 输出 [ 1, 2, 3 ]
代码没问题。现在,我们对代码进行封装:
// 封装去重函数del
function del(arr1) {
var arr = []
arr1.map((v) => {
arr.includes(v) || arr.push(v)
})
console.log(arr)
}
封装好啦,我们来测试一下叭。
var arr1 = [1, 2, 3, 3, 2, 'x', 'z', 'z', 'y', 'x', 1, 'z', 'x']
del(arr1)
// 输出 [ 1, 2, 3, 'x', 'z', 'y' ]
测试成功。没问题。
注:
如果自己不封装,可以用new Set()扩展运算符,来实现数组去重。
// 举个例子
var arr = [1, 2, 3, 2, 3]
var arr1 = [...new Set(arr)]
console.log(arr1)
// 输出 [ 1, 2, 3 ]
学习更多set知识:JS内置标准对象Set
以上。