`Array.prototype.concat.apply([], children)`真能拍平数组吗?

来源:2-7 createElement

flyingjoer

2018-09-23

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)这种用法真的能把二维数组变成一维的吗?

  1. 首先, 它只要进入一次if, 就直接return了,不会考虑后面是否还有children是数组,
  2. 其次, concat里面传入的是children, 不是children[i],感觉这就类似于下面这样:
var a = [1, [2, 3]]
[].concat(a)
写回答

1回答

ustbhuangyi

2018-09-23

var a = [1, [2, 3],[4,5,6]]
Array.prototype.concat.apply([], a)
返回 [1, 2, 3, 4, 5, 6]
所以只要出现嵌套,执行一次,就可以把所有的二维数组都拍平

1
5
BernhardRiemann
为什么children只能是二维的呢,树不应该层数不确定吗
2019-01-31
共5条回复

Vue.js 源码深入解析 深入理解Vue实现原理

全方位讲解 Vue.js 源码,进阶高级工程师

4986 学习 · 1038 问题

查看课程