原文:Javascript多维数组扁平化 - 每天一个JavaScript小知识@Js中文网 · 码农进阶题库

原文地址:https://www.javascriptc.com/interview-tips/zh_cn/javascript/flattening-multidimensional-arrays-in-javascript/

下面是将多位数组转化为单一数组的三种不同方法。

对于此数组:

var myArray = [[1, 2],[3, 4, 5], [6, 7, 8, 9]];

我们需要的结果是:

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

解决方案1:使用concat()apply()

var myNewArray = [].concat.apply([], myArray);
// [1, 2, 3, 4, 5, 6, 7, 8, 9]

解决方案2:使用reduce()

var myNewArray = myArray.reduce(function(prev, curr) {
  return prev.concat(curr);
});
// [1, 2, 3, 4, 5, 6, 7, 8, 9]

解决方案3:

var myNewArray3 = [];
for (var i = 0; i < myArray.length; ++i) {
  for (var j = 0; j < myArray[i].length; ++j)
    myNewArray3.push(myArray[i][j]);
}
console.log(myNewArray3);
// [1, 2, 3, 4, 5, 6, 7, 8, 9]

这里看一下三种逻辑的实际作用。

方案四:使用 ES6 的展开运算符

var myNewArray4 = [].concat(...myArray);
console.log(myNewArray4);
// [1, 2, 3, 4, 5, 6, 7, 8, 9]

这里 查看这四种方法

对于无限嵌套的数组请使用 Lodash 的 flattenDeep()

如果你担心性能问题的话,这里 有一个测试让你确认他们是如何执行的。

对于较大的数组试一下Underscore的flatten().

如果你对性能好奇,这里有一个测试。

扩展阅读: