Преобразование 2D-массива JavaScript в 1D-массив

Я хочу преобразовать массив 2D JavaScript в 1D-массив, так что каждый элемент 2D-массива будет объединен в один одномерный массив.

Здесь я пытаюсь преобразовать 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?
}

Ответы

Ответ 1

Попробуйте .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

Используйте 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() любом случае concat() слишком медленный в этом случае.

Путь Underscore.js

Это будет рекурсивно сглаживать массивы любой глубины (должно также работать для больших массивов):

arr1d = _.flatten(arr2d);

Если вы хотите сгладить только один уровень, передайте true в качестве второго аргумента.

Короткий путь <ES6

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

Ответ 3

Как насчет:

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/

Ответ 5

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];
});

Ответ 6

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/