代码之家  ›  专栏  ›  技术社区  ›  totalnoob

使用reduce在JavaScript中展平数组

  •  1
  • totalnoob  · 技术社区  · 6 年前

    它是数组。reduce((累加器,value)=>使用累加器执行某些操作,为什么返回空数组?

    let a = [
      [1,2],
      [
        [3,4]
      ],
      [
        [[5],[6]]
      ]
    ];
    
    const flatten = arr => arr.reduce((a, v) => {
      v instanceof Array ? flatten(v) : a.push(v);
      return a;
    }, [])
    
    
    console.log(flatten(a));
    1 回复  |  直到 6 年前
        1
  •  4
  •   CertainPerformance    6 年前

    这个 flatten(v)

    let a = [
      [1,2],
      [
        [3,4]
      ],
      [
        [[5],[6]]
      ]
    ];
    
    const flatten = arr => arr.reduce((a, v) => {
      v instanceof Array ? a.push(...flatten(v)) : a.push(v);
      return a;
    }, [])
    
    
    console.log(flatten(a));

    或者,您可以使用 concat ,并且仅当需要将整个内容解析为 表示 (不要用它来代替 if else ):

    let a = [
      [1,2],
      [
        [3,4]
      ],
      [
        [[5],[6]]
      ]
    ];
    
    const flatten = arr => arr.reduce((a, v) => {
      if (v instanceof Array) {
        return a.concat(flatten(v))
      } else {
        a.push(v);
        return a;
      }
    }, [])
    
    
    console.log(flatten(a));
        2
  •  0
  •   akhtarvahid    4 年前

    let arr = [[1,2],[[3,4]],[[[5],[6]]]];
    
    const flattenArr = (arr) => 
      arr.reduce((acc, val) => 
       Array.isArray(val) ? 
        acc.concat(flattenArr(val)) :
         acc.concat(val), []);
     
    console.log(flattenArr(arr));