将2D JavaScript数组转换为1D数组

And*_*een 26 javascript

我想将2D JavaScript数组转换为1D数组,以便将2D数组的每个元素连接成单个1D数组.

在这里,我正在尝试转换arrToConvert为1D阵列.

var arrToConvert = [[0,0,1],[2,3,3],[4,4,5]];

console.log(get1DArray(arrToConvert)); //print the converted array

function get1DArray(2dArr){
    //concatenate each element of the input into a 1D array, and return the output
    //what would be the best way to implement this function?
}
Run Code Online (Sandbox Code Playgroud)

Bla*_*čič 61

使用ES6 Spread Operator

arr1d = [].concat(...arr2d);
Run Code Online (Sandbox Code Playgroud)

请注意,此方法仅arr2d在少于约100 000个子阵列时才有效.如果你的阵列比这个大,你会得到一个RangeError: too many function arguments.

对于> ~100 000行

arr = [];
for (row of table) for (e of row) arr.push(e);
Run Code Online (Sandbox Code Playgroud)

concat() 无论如何,在这种情况下太慢了.

Underscore.js的方式

这将递归地压平任何深度的数组(也应该适用于大型数组):

arr1d = _.flatten(arr2d);
Run Code Online (Sandbox Code Playgroud)

如果你只想将它压平一个级别,则传递true为第二个参数.

简短的<ES6方式

arr1d = [].concat.apply([], arr2d);
Run Code Online (Sandbox Code Playgroud)

  • @daddycardona underscore.js是一个外部库.在导入之前,它将是未定义的.http://underscorejs.org (4认同)
  • 只是补充... ES2019 在 Array Prototype 中引入了 .flat() 方法。您可以在 flat() 方法中传递“深度”参数来指定嵌套数组结构应展平的深度。默认为 1。 (3认同)

Mar*_*rty 25

试试.concat():

var arrToConvert = [[0,0,1],[2,3,3],[4,4,5]];
var newArr = [];


for(var i = 0; i < arrToConvert.length; i++)
{
    newArr = newArr.concat(arrToConvert[i]);
}

console.log(newArr);
Run Code Online (Sandbox Code Playgroud)


mar*_*ljn 11

怎么样:

var arrToConvert = [[0,0,1],[2,3,3],[4,4,5]];

function get1DArray(arr){
    return arr.join().split(",");
}

console.log(get1DArray(arrToConvert));
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/JRR4J/


小智 10

尝试 .reduce()

var test2d = [
  ["foo", "bar"],
  ["baz", "biz"]
];
var merged = test2d.reduce(function(prev, next) {
  return prev.concat(next);
});
Run Code Online (Sandbox Code Playgroud)

资料来源:http://jsperf.com/2-dimensional-array-merge