Javascript: 如何使用reduce函数和concat数组函数将数组的数组转化为数组?
Javascript: How to use the reduce function and the concat array function to transform an array of arrays into an array?
Javascript:如何使用reduce函数和concat数组函数将数组的数组转化为数组?
在下面的代码中,数组的数组没有被转换,浏览器控制台日志记录了一个空数组。
在下面的代码下,失败的具体原因是什么?
如有任何帮助,我们将不胜感激。
// use reduce to transform an array of
// arrays to one array that combines all.
// elements.
function combine(array1d, element)
{
array1d.concat(element);
return array1d;
}
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));
可以先用flat
将二维数组转为数组,再用reduce
函数添加元素
如果您不需要添加元素,只需删除 reduce
。
var res = array2d.flat().reduce((prev, curr) => prev + curr);
再见,这里是工作示例:
let array2d = [[1, 2,],[3, 4]];
let result = array2d.flat(1);
console.log(result);
const res = array2d.reduce((arr, seq) => {
arr.push(...seq);
return arr;
}, [])
console.log(res)
你为什么不用老式的方法呢?
function mergeArray(array){
let finalArray= []
for(let i=0;i<iarray.lenght;i++){
for(let j=0;j<array[i].lenght;j++){
finalArray.push(array[i][j])
}
}
return finalArray
}
正如您从所有答案中看到的那样,有多种方法可以做到这一点。
- 修复原题错误的一个解决方案:
function combine(array1d, element) {
return array1d.concat(element);
}
function reduce(array2d, reducerFn) {
let array1d = [];
for (let element of array2d) {
array1d = reducerFn(array1d, element);
}
return array1d;
}
let array2d = [[1, 2,],[3, 4]];
console.log(reduce(array2d, combine));
这里的区别是 return array1d.concat(element);
调用而不是 returning array1d
并在其上调用 .concat
。 concat 没有副作用,所以它创建了一个新数组而不是改变原来的数组。我还将 reduce
中的 combine
重命名为 reducerFn
以更清楚地表明它可以更改为其他名称。
- 直接在数组上使用reduce(几乎所有浏览器都支持)
let result = array2d.reduce(function (flattenedArray, element) {
return flattenedArray.concat(element);
}, []);
- 使用
reduce
和 spread operator instead of concat
(no IE support - if you can drop it, you can also use Arrow functions):
let result = array2d.reduce(function (flattenedArray, element) {
return [...flattenedArray, ...element];
}, []);
- 使用flatMap,恒等函数可以用来展平数组:
let result = array2d.flatMap(element => element);
- 使用 flat,将(深度)嵌套数组展平为参数接收的维数:
let result = array2d.flat();
- 通过为每个维度创建一个 for 循环来使用命令式样式,按顺序填充数组 - 请参阅
的回答
flatMap
和 reduce
,和 concat
一样,也是 return 一个新数组,没有改变原来的数组。由于原始版本对我来说更像是尝试使用函数式编程风格,所以我想这些是您工具箱的一个很好的补充。 flatMap
和 flat
是相对较新的语言添加,因此根据您需要支持的环境,您最终可能会改用其他语言。
Javascript:如何使用reduce函数和concat数组函数将数组的数组转化为数组?
在下面的代码中,数组的数组没有被转换,浏览器控制台日志记录了一个空数组。
在下面的代码下,失败的具体原因是什么?
如有任何帮助,我们将不胜感激。
// use reduce to transform an array of
// arrays to one array that combines all.
// elements.
function combine(array1d, element)
{
array1d.concat(element);
return array1d;
}
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));
可以先用flat
将二维数组转为数组,再用reduce
函数添加元素
如果您不需要添加元素,只需删除 reduce
。
var res = array2d.flat().reduce((prev, curr) => prev + curr);
再见,这里是工作示例:
let array2d = [[1, 2,],[3, 4]];
let result = array2d.flat(1);
console.log(result);
const res = array2d.reduce((arr, seq) => {
arr.push(...seq);
return arr;
}, [])
console.log(res)
你为什么不用老式的方法呢?
function mergeArray(array){
let finalArray= []
for(let i=0;i<iarray.lenght;i++){
for(let j=0;j<array[i].lenght;j++){
finalArray.push(array[i][j])
}
}
return finalArray
}
正如您从所有答案中看到的那样,有多种方法可以做到这一点。
- 修复原题错误的一个解决方案:
function combine(array1d, element) {
return array1d.concat(element);
}
function reduce(array2d, reducerFn) {
let array1d = [];
for (let element of array2d) {
array1d = reducerFn(array1d, element);
}
return array1d;
}
let array2d = [[1, 2,],[3, 4]];
console.log(reduce(array2d, combine));
这里的区别是 return array1d.concat(element);
调用而不是 returning array1d
并在其上调用 .concat
。 concat 没有副作用,所以它创建了一个新数组而不是改变原来的数组。我还将 reduce
中的 combine
重命名为 reducerFn
以更清楚地表明它可以更改为其他名称。
- 直接在数组上使用reduce(几乎所有浏览器都支持)
let result = array2d.reduce(function (flattenedArray, element) {
return flattenedArray.concat(element);
}, []);
- 使用
reduce
和 spread operator instead ofconcat
(no IE support - if you can drop it, you can also use Arrow functions):
let result = array2d.reduce(function (flattenedArray, element) {
return [...flattenedArray, ...element];
}, []);
- 使用flatMap,恒等函数可以用来展平数组:
let result = array2d.flatMap(element => element);
- 使用 flat,将(深度)嵌套数组展平为参数接收的维数:
let result = array2d.flat();
- 通过为每个维度创建一个 for 循环来使用命令式样式,按顺序填充数组 - 请参阅 的回答
flatMap
和 reduce
,和 concat
一样,也是 return 一个新数组,没有改变原来的数组。由于原始版本对我来说更像是尝试使用函数式编程风格,所以我想这些是您工具箱的一个很好的补充。 flatMap
和 flat
是相对较新的语言添加,因此根据您需要支持的环境,您最终可能会改用其他语言。