小前端笔记.在这里记录一些方法.
在工作中经常会获取到各式各样的数据数组,一开始想的很简单,不就是遍历嘛.我会!实际上,我啥也不会> _ <
废话不多说,贴代码
一维数组去重的方法有很多,记录几个我比较喜欢的吧.
使用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...
记录了,让自己成长...
忘记了,让自己回顾...
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。