JavaScript flattening an array of arrays of objects

前端 未结 10 1690
名媛妹妹
名媛妹妹 2020-11-29 06:15

I have an array which contains several arrays, each containing several objects, similar to this.

[[object1, object2],[object1],[object1,object2,object3]]
         


        
10条回答
  •  日久生厌
    2020-11-29 07:01

    A recursive solution for deep (nested) flattening:

    function flatten(a) {
      return Array.isArray(a) ? [].concat.apply([], a.map(flatten)) : a;
    }
    

    A bit more compactly with ES6:

    var flatten = a => Array.isArray(a) ? [].concat(...a.map(flatten)) : a;
    

    For fun, using a generator named F for "flatten", to lazily generate flattened values:

    function *F(a) {
      if (Array.isArray(a)) for (var e of a) yield *F(e); else yield a;
    }
    
    >> console.log(Array.from(F([1, [2], 3])));
    << [ 1, 2, 3 ]
    

    For those not familiar with generators the yield * syntax yields values from another generator. Array.from takes an iterator (such as results from invoking the generator function) and turns it into an array.

提交回复
热议问题