场景:vue2源码中,把数组打平,让它的深度只有一层
二维数组降为一维数组
export function simpleNormalizeChildren (children: any) {
for (let i = 0; i < children.length; i++) {
if (Array.isArray(children[i])) {
return Array.prototype.concat.apply([], children)
}
}
return children
}
分析: Array.prototype.concat.apply([], children)
concat
: 如果concat方法的参数是一个元素,该元素会被直接插入到新数组中;如果参数是一个数组,该数组的各个元素将被插入到新数组中
apply
: apply方法会调用一个函数,apply方法的第一个参数会作为被调用函数的this值,apply方法的第二个参数(一个数组,或类数组的对象)会作为被调用对象的arguments值,也就是说该数组的各个元素将会依次成为被调用函数的各个参数
多维数组降为一维数组
function simpleNormalizeChildren(children){
let arr = []
for(let i=0
if(Array.isArray(children[i])){
arr = arr.concat(simpleNormalizeChildren(children[i]))
}else{
arr = arr.concat(children[i])
}
}
return arr
}