**apply****call**类似,不同的是apply(obj,arr)后面接受的参数是一个数组。

    concat() 方法则会把两个数组拼接在一起,并返回一个新的数组,concat 里的参数可以为多个数组,并在拼接过程中会自动解开一层数组嵌套。

    1. // 合并嵌套数组
    2. var array1 = [1,2,3];
    3. array1.concat([[4]], [5], [[6,7]]); // [1,2,3,[4],5,[6,7]]

    判断数组里是否含有二维数组,如果含有则通过apply调用Array方法,并让concat解开一层嵌套,返回新的数组

    1. // 手动拍平
    2. function simpleNormalizeChildren (children) {
    3. for (var i = 0; i < children.length; i++) {
    4. if (Array.isArray(children[i])) {
    5. return Array.prototype.concat.apply([], children)
    6. }
    7. }
    8. return children
    9. }
    10. // ES6语法
    11. function simpleNormalizeChildren (children) {
    12. return [].concat(...children)
    13. }