**apply**
和**call**
类似,不同的是apply(obj,arr)
后面接受的参数是一个数组。
concat()
方法则会把两个数组拼接在一起,并返回一个新的数组,concat 里的参数可以为多个数组,并在拼接过程中会自动解开一层数组嵌套。
// 合并嵌套数组
var array1 = [1,2,3];
array1.concat([[4]], [5], [[6,7]]); // [1,2,3,[4],5,[6,7]]
判断数组里是否含有二维数组,如果含有则通过apply调用Array方法,并让concat解开一层嵌套,返回新的数组
// 手动拍平
function simpleNormalizeChildren (children) {
for (var i = 0; i < children.length; i++) {
if (Array.isArray(children[i])) {
return Array.prototype.concat.apply([], children)
}
}
return children
}
// ES6语法
function simpleNormalizeChildren (children) {
return [].concat(...children)
}