将二维 JavaScript 数组转换为一维数组

IT技术 javascript
2021-03-02 14:49:25

我想将二维 JavaScript 数组转换为一维数组,以便将二维数组的每个元素连接成一个一维数组。

在这里,我正在尝试转换arrToConvert为一维数组。

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个回答

使用 ES6 扩展运算符

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);
@daddycardona underscore.js 是一个外部库。在您导入它之前,它将是未定义的。underscorejs.org
2021-04-29 14:49:25
当我尝试在简单的事情上使用它时,下划线方式给了我一个错误,说它是 undefince
2021-05-07 14:49: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);

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

怎么样:

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/

如果嵌套元素是对象而不是数字或字符串会发生什么?
2021-04-26 14:49:25
@MartyWallace["0", "0", "1", "2", "3", "3", "4", "4", "5", "[object Object]"]这就是发生的事情。我明白你的观点,我的解决方案只适用于字符串和数字。
2021-05-15 14:49:25
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/