JavaScript:使用reduce与concat转换二维数组失败的原因排查
问题解答:二维数组转一维数组的代码错误排查
我来帮你排查这个问题,你的代码核心问题出在concat方法的使用逻辑上,咱们一步步拆解:
错误原因分析
先看你定义的combine函数:
function combine(array1d, element) { array1d.concat(element); return array1d; }
这里的关键知识点是:concat是一个纯方法,它不会修改调用它的原数组,而是返回一个包含原数组元素和新元素的全新数组。你现在只是调用了concat但没有接收它的返回值,每次调用combine都直接返回最初的空数组[],所以最终输出结果自然是空数组。
修正后的代码
只需要修改combine函数,把concat返回的新数组作为返回值即可:
// 使用reduce将二维数组转换为包含所有元素的一维数组 function combine(array1d, element) { // 返回concat生成的新数组,替代原数组 return array1d.concat(element); } function reduce(array2d, combine) { let array1d = []; for (let element of array2d) { array1d = combine(array1d, element); } return array1d; } let array2d = [[1, 2],[3, 4]]; console.log(reduce(array2d, combine)); // 输出 [1,2,3,4]
更简洁的原生实现
如果你不需要自己手写reduce函数,JavaScript原生数组已经内置了reduce方法,用起来更简洁:
let array2d = [[1, 2],[3, 4]]; const flattenedArray = array2d.reduce((accumulator, current) => accumulator.concat(current), []); console.log(flattenedArray); // 输出 [1,2,3,4]
甚至ES2019之后还提供了flat()方法,可以直接扁平化数组,一步到位:
let array2d = [[1, 2],[3, 4]]; console.log(array2d.flat()); // 输出 [1,2,3,4]
内容的提问来源于stack exchange,提问作者65535
相关产品推荐
相关产品推荐

