在尝试使用reduce方法展平数组之后,我尝试使用类似的for循环方法。 任何人都可以解释为什么for循环使用concat不会使数组变平? 附:我知道我可以使用带有Array.isArray的嵌套for循环来展平。在看到如何减少数组变平之后,只是期望concat在for循环中工作。
var arrays = [
[1, 2, 3],
[4, 5],
[6]
];
console.log(arrays.reduce(function(arr, elem) {
return arr.concat(elem);
}, []));
function flatten(arr) {
var flat = [];
for (var i = 0; i < arr.length; i++) {
flat.concat(arr[i]);
}
return flat;
}
console.log(flatten(arrays));
答案 0 :(得分:7)
concat
不会修改数组。为了使您的代码有效,您必须为其分配值,然后它将执行相同的
var arrays = [[1,2,3], [4,5], [6]];
function flatten(arr) {
var flat = [];
for (var i = 0; i < arr.length; i++) {
flat = flat.concat(arr[i]);
}
return flat;
}
console.log(flatten(arrays));
只是一个旁注 - 使用ES6,您可以使用展开运算符[].concat(...arr);
var arrays = [[1,2,3], [4,5], [6]];
function flatten(arr) {
return [].concat(...arr);
}
console.log(flatten(arrays));