43

2D JavaScript配列を1D配列に変換して、2D配列の各要素が1つの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?
}
4

6 に答える 6

120

ES6スプレッド演算子を使用する

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

この方法は、arr2dサブアレイが約100000未満の場合にのみ機能することに注意してください。配列がそれより大きくなると、が得られますRangeError: too many function arguments

>〜100000行の場合

arr = [];
for (row of table) for (e of row) arr.push(e);

concat()とにかくこの場合は遅すぎます。

Underscore.jsの方法

これにより、任意の深さのアレイが再帰的にフラット化されます(大きなアレイでも機能するはずです)。

arr1d = _.flatten(arr2d);

単一レベルのみをフラット化する場合はtrue、2番目の引数として渡します。

短い<ES6ウェイ

arr1d = [].concat.apply([], arr2d);
于 2016-10-01T10:58:47.870 に答える
41

試してみてください.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);
于 2013-02-12T02:00:36.283 に答える
24

試す.reduce()

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

ソース: http: //jsperf.com/2-dimension-array-merge

于 2014-10-12T02:31:03.427 に答える
14

どうですか:

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/

于 2013-02-12T02:06:05.990 に答える
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/

于 2013-02-12T02:19:09.247 に答える
0
var arrToConvert = [[0,0,1],[2,3,3],[4,4,5]];

var modifiedArray = arrToConvert.map(function(array){ 
    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];
});
于 2014-02-06T08:32:50.547 に答える