【问题标题】:How to print out a nested array effectively in javascript? [duplicate]如何在javascript中有效地打印出嵌套数组? [复制]
【发布时间】:2017-06-04 21:55:01
【问题描述】:

我有一个嵌套数组:

[1, 2, [3, 4, [5, [6]], 7], 8, 9]

我怎样才能以优雅的方式打印出来,看起来像这样:

[1, 2, 3, 4, 5, 6, 7, 8, 9]

【问题讨论】:

  • 你有什么不优雅的方式?
  • "print" 如console.log 或 "print" 如 html 中的输出?
  • JSON.parse("[" + [1,2,[3,4,[5,[6]],7],8,9].join(",") + "]")
  • 这称为“扁平化”。谷歌。
  • 也看看Underscore的_.flatten

标签: javascript


【解决方案1】:
function printArray(arr) {
    if ( typeof(arr) == "object") {
        for (var i = 0; i < arr.length; i++) {
            printArray(arr[i]);
        }
    }
    else console.log(arr);
}

printArray([1,2,[3,4,[5,[6]],7],8,9]);

【讨论】:

  • 我只想将document.write 更改为console.log。使用document.write 是非常糟糕的做法
【解决方案2】:

你可以试试这个,它会让你的数组变平。

let a = [1, 2, [3, 4, [5, [6]], 7], 8, 9];
const flatten = arr => arr.reduce((a, b) => a.concat(Array.isArray(b) ? flatten(b) : b), []);
console.log(flatten(a));

其实你可以在这里找到:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce

更新 1:

这是另一种解决方案。

function flatten(arr) {
    var x;
    x = JSON.stringify(arr);
    x = "[" + x.replace(/[\[\]]/g, "") + "]";
    return JSON.parse(x);
}
console.log(flatten(a));

【讨论】:

    【解决方案3】:

    @Yaser 解决方案看起来非常优雅。以防万一您想使用功能框架,这里有一个使用 ramda

    的示例
    const arr = R.flatten([1, 2, [3, 4, [5, [6]], 7], 8, 9]);
    console.log(arr); //[1, 2, 3, 4, 5, 6, 7, 8, 9]
    

    【讨论】:

      【解决方案4】:

      这是使用 ES6 的另一种方式:

      var nested = [1, 2, [3, 4, [5, [6]], 7], 8, 9];
      
      var flat = [].concat(nested);
      
      for(var i = 0; i < flat.length; i++) {
          if(Array.isArray(flat[i])) {
              flat.splice(i, 1, ...flat[i--]);  
          }
      }
      
      console.log(flat);
      

      【讨论】:

      • 结果是:[1, 2, 3, 4, Array[2], 7, 8, 9] in chrome or [1, 2, 3, 4, [5, [6] ], 7, 8, 9] 在 Firefox 中。
      • 是的,看到了,用有效的解决方案更新了答案@Y.C.
      【解决方案5】:

      使用 node.js 时,除了打印输出的逗号后没有空格之外,以下内容几乎可以满足您的要求:

      console.log('[%s]', [1, 2, [3, 4, [5, [6]], 7], 8, 9]);
      

      可能需要在数组上调用toString() 才能在其他环境中获得相同的结果:

      console.log('[%s]', [1, 2, [3, 4, [5, [6]], 7], 8, 9].toString());
      

      【讨论】:

      • 对我来说,这会在控制台中显示[Array[5]]
      • 查看我的更新答案。
      猜你喜欢
      • 1970-01-01
      • 2021-06-03
      • 2019-05-13
      • 2018-07-04
      • 2020-08-25
      • 2015-03-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多