小前端笔记.在这里记录一些方法.

在工作中经常会获取到各式各样的数据数组,一开始想的很简单,不就是遍历嘛.我会!实际上,我啥也不会> _ <

废话不多说,贴代码
一维数组去重的方法有很多,记录几个我比较喜欢的吧.

使用includes 好用! 首先这里是用来检测某个数组是否包含某个值.
function updateArr(arr) {
    let array = []
    for(let i = 0; i < arr.length; i++) {
            if( !array.includes( arr[i]) ) {
                    array.push(arr[i]);
              }
    }
    return array
}
console.log(updateArr([1,'one',2,'one',2,3])) // [1,2,3,'one']
使用sort() 好用! 这里先用sort()排序 然后在相邻相比较.
function updateArr(arr) {
    arr = arr.sort()
    let array= [arr[0]];
    for (let i = 1; i < arr.length; i++) {
        if (arr[i] !== arr[i-1]) {
            arrry.push(arr[i]);
        }
    }
    return arrry;
}
console.log(updateArr([1,'one',2,'one',2,3])) // [1, 2, 3, "one"]
使用Set()去重 es6中提出的Set 好用!可以去看看es6官网
function updateArr (arr) {
    return Array.from(new Set(arr))
}
console.log(updateArr([1,'one',2,'one',2,3])) // [1, 2, 3, "one"]

但是真实工作中,数据往往不会太简单.当我们遇到多维数据了该如何呢?

使用递归的方式把多维数据转成一维数据就好了
function flatTag(arr) {
    return [].concat(...arr.map(item => Array.isArray(item.children) ? this.flatTag(item.children) : item))
}

让我感觉真的很有味道..你品,细细的品这段代码.
我只说这里面的children包含的还有数组.所以又重新遍历了一遍.

这里把多维的数据转为一维数组后,再去重.虽然简单了一些,可是这个时候你又会发现,includes一类的突然就不好使了,那是因为数组里面的是对象.此时reduce() 来了,是的,他来了.
function updateArr(arr) {
    let arr2 = arr.reduce((all, next) => all.some((atom) => atom.cameraId === next.cameraId) ? all : [...all, next], [])
    return arr2 //这就已经去重了.
}

一定要活学活用,代码是复制我工作里的.
首先reduce的语法是:

arr.reduce(callback,[initialValue])

详细的reduce用法介绍请看下面
https://segmentfault.com/a/11...

记录了,让自己成长...
忘记了,让自己回顾...


aittbb1215
0 声望2 粉丝

这里.