reduce方法创建新列表,为什么未定义

reduce method to create new list, why undefined?

本文关键字:为什么 未定义 列表 方法 创建 新列表 reduce      更新时间:2023-09-26

这段代码给了我想要的答案:

var arrays = [[1, 2, 3], [4, 5], [6]];
var newArr = arrays.reduce(function(newArray, ele){
  return newArray.concat(ele);
});
console.log(newArray) // -> [1,2,3,4,5,6];

但这段代码给了我一个"未定义"的数组:

var combine = function(list){
  list.reduce(function(newArray,ele){
    return newArray.concat(ele);
  });
};
var newList = combine(arrays);
console.log(newList); // -> undefined

我想制作一个函数,将一个数组缩减为一个数组,但我无法将该函数保存为一个变量。我的代码出了什么问题?

您忘记返回列表

试试这个

var combine = function(list){
  return list.reduce(function(newArray,ele){
    return newArray.concat(ele);
  });
};
var newList = combine(arrays);
console.log(newList);
var combine = function(list){
  return list.reduce(function(newArray,ele){
    return newArray.concat(ele);
  });
};

注意退货。列表变成了一个单独的数组,但您需要从最外层的函数返回它。这就是为什么你得到了未定义的

这并不能直接回答您的问题,所以我正在标记这个社区wiki。

如果您希望组合数组,使用concatapply将使其成为一行:

function combine(list) {
    return Array.prototype.concat.apply([], list);
}

如果您使用JavaScript ES6,这也适用:

const combine = l => [].concat(...l)