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

时间:2013-02-12 01:58:56

标签: 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?
}

6 个答案:

答案 0 :(得分:49)

使用ES6 Spread Operator

arr1d = [].concat(...arr2d);

请注意,此方法仅在arr2d小于约100 000个子数组时有效。如果您的数组大于此值,则会得到RangeError: too many function arguments

对于> ~100 000行

arr = [];
for (row of table) for (e of row) arr.push(e);
无论如何,

concat()在这种情况下太慢了。

Underscore.js方式

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

arr1d = _.flatten(arr2d);

如果您只想将其展平为一个级别,请将true作为第二个参数传递。

短< ES6方式

arr1d = [].concat.apply([], arr2d);

答案 1 :(得分:22)

尝试.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);

答案 2 :(得分:8)

怎么样:

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

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

console.log(get1DArray(arrToConvert));

http://jsfiddle.net/JRR4J/

答案 3 :(得分:7)

尝试.reduce()

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

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

答案 4 :(得分:1)

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

var modifiedArray = arrToConvert.map(function(convArray){ 
    return array[0]+array[1]+array[2];
});

另一个例子

var passengers = [ 
  ["Thomas", "Meeks"],
  ["Gregg", "Pollack"],
  ["Christine", "Wong"],
  ["Dan", "McGaw"]
];

var modifiedNames = passengers.map(function(convArray){
    return convArray[0]+" "+convArray[1];
});

答案 5 :(得分:0)

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

function get1DArray(arr){

    var result = new Array();

    for (var x = 0; x < arr.length; x++){
        for (var y = 0; y < arr[x].length; y++){

        result.push(arr[x][y])

        }
    }

    return result
}


alert (get1DArray(arrToConvert))

http://jsfiddle.net/Saturnix/ReeqQ/