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

深度数组上的JavaScript深度扩展运算符

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

    我有一个深数组,因此数组的子数组如下:

    const deepArray = ['1',[['a'],['b']],[2],[[[['4',[3,'c']]]],[5]]];
    

    我想把所有的孩子都放在一个平面阵列里,我用 spread operator 属于 ES6 但它传播的很浅,我不知道如何让它们传播到下面:

    const shallowArray = ['1','a','b',2,'4',3,'c',5];
    

    也许一个递归函数可以做到这一点,但是如何做到呢?它应该是非常优化的,因为我想用在一个 react native

    3 回复  |  直到 6 年前
        1
  •  3
  •   AmerllicA    6 年前

    使用 Array.prototype.flat

    如果知道数组深度或最大深度大小,请使用以下代码:

    const flatArray = deepArray.flat(7); // assume you know depth size is 7
    

    如果不知道深度,可以使用递归方法 reduce

     const deepFlatten = arr =>
             arr.reduce(
               (acc, val) =>
                 Array.isArray(val) 
                   ? acc.concat(deepFlatten(val)) 
                   : acc.concat(val),
                 []
             );
    

    使用上述功能来平整待定深度:

    const flatArray = deepFlatten(deepArray);
    
        2
  •  3
  •   Harun Or Rashid    6 年前

    使用递归,非常简单:)

    let deepArray = ['1',[['a'],['b']],[2],[[[['4',[3,'c']]]],[5]]];
    let array = [];
     
    function f(d){
        Array.isArray(d)? d.forEach(x=> f(x)) : array.push(d);   
    }
        
    deepArray.forEach(x=>f(x));
    console.log(array);    
        
        3
  •  0
  •   AmerllicA    6 年前

    我想要一个展平函数 react-native 合并样式。因为在 有时你有一个深刻的阵列的风格,这是必不可少的平坦他们。

    反应本机 StyleSheet 有一个良好的和优化 flatten 处理此问题的函数。

    const styleJoiner = (...arg) => StyleSheet.flatten(arg);