1、扁平化数组
1、const deepFlat = (arr) => {
return [].concat(...arr.map(x=>Array.isArray(x)?deepFlat(x):x))
}
2、es6方法flat,不过有些浏览器不兼容。
arr.flat(Infinity)
3、转化为字符串
arr.toString().split(',').map(item=>+item)
4、转化为json字符串
JSON.stringify(arr).replace(/(\[|\])/g,'').split(',').map(item=>+item)
5、循环验证,这种方法与第一种大同小异,不过写法更简洁
while(arr.some(item=>Array.isArray(item))){arr=[].concat(...arr)}
第五种方法简单解释一下,while条件为真时,{}中的语句就会执行,
some循环遍历,只要有一个为真,arr=[].concat(...arr)就会执行。
关于arr=[].concat(...arr),
我给一个demo,[].concat(...[1,[2,[3]]])会输出[1,2,[3]]。
简单来说,就是每执行一次,数组深度就会降低12、将数组循环遍历为树节点
var arr = [
{id:1,pid:0,value:'a'},
{id:2,pid:0,value:'b'},
{id:3,pid:1,value:'aa'},
{id:4,pid:2,value:'bb'},
{id:5,pid:3,value:'aaa'}
]
arr.map(x=>{x.children=arr.filter(y=>y.pid===x.id); return x})
3、遍历数组深度
function getMaxFloor(treeData) {
let max = 0
function each(data, floor) {
data.forEach(e => {
if (floor > max) {
max = floor
}
if (e.children.length > 0) {
each(e.children, floor + 1)
}
})
}
each(treeData, 1)
return max
}