将二维 JavaScript 数组转换为一维数组 [重复]
Posted
技术标签:
【中文标题】将二维 JavaScript 数组转换为一维数组 [重复]【英文标题】:Convert a 2D JavaScript array to a 1D array [duplicate] 【发布时间】:2013-01-27 06:30:51 【问题描述】:我想将 2D javascript 数组转换为 1D 数组,以便将 2D 数组的每个元素连接成单个 1D 数组。
在这里,我正在尝试将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?
【问题讨论】:
Array.join()
? developer.mozilla.org/en-US/docs/JavaScript/Reference/…
@MichaelBerkowski 看起来Array.join()
返回的是字符串而不是数组。
您的预期输出是什么?您的意思是要将 3 个子阵列扁平化为一个阵列吗?我认为我误解了。
是不是就这么简单arrToConvert.flat()
?
【参考方案1】:
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];
);
【讨论】:
【参考方案2】:使用 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
作为第二个参数传递。
一个简短的arr1d = [].concat.apply([], arr2d);
arr1d = [].concat.apply([], arr2d);
【讨论】:
当我尝试在简单的东西上使用它时,下划线方式给我一个错误,说它是 undefince @daddycardona underscore.js 是一个外部库。在您导入它之前它将是未定义的。 underscorejs.org 只是补充... ES2019 在 Array Prototype 中引入了 .flat() 方法。您可以在 flat() 方法中传递“深度”参数来指定嵌套数组结构应该被展平的深度。默认为 1。【参考方案3】:试试.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】: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/
【讨论】:
【参考方案5】:怎么样:
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/
【讨论】:
如果嵌套元素是对象而不是数字或字符串会怎样? @MartyWallace["0", "0", "1", "2", "3", "3", "4", "4", "5", "[object Object]"]
这就是发生的事情。我明白你的意思,我的解决方案只适用于字符串和数字。【参考方案6】:
试试.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);
【讨论】:
以上是关于将二维 JavaScript 数组转换为一维数组 [重复]的主要内容,如果未能解决你的问题,请参考以下文章