使用 reduce 函数返回数组
Using the reduce function to return an array
为什么当我想使用reduce函数中的推送函数返回一个新数组时,我得到一个错误。但是,当我在reduce函数中使用concat方法时,它会毫无问题地返回一个新数组。
我要做的就是将一个数组传递给reduce函数并返回相同的数组。
var store = [0,1,2,3,4];
var stored = store.reduce(function(pV,cV,cI){
console.log("pv: ", pV);
return pV.push(cV);
},[]);
这将返回错误。但是当我使用 concat 时:
var store = [0,1,2,3,4];
var stored = store.reduce(function(pV,cV,cI){
console.log("pv: ", pV);
return pV.concat(cV);
},[]);
它返回相同的数组。
知道为什么吗?
push
返回数组的新长度。
您需要的是最初提供的数组。
因此,请按如下方式更改代码。
var store = [0, 1, 2, 3, 4];
var stored = store.reduce(function(pV, cV, cI){
console.log("pv: ", pV);
pV.push(cV);
return pV; // ********* Important ******
}, []);
concat
返回将提供的数组的元素和串联元素组合在一起的新数组。 所以它有效。
只是为了完整起见,对于下一个在这个问题上发生的人,你正在做的事情通常是通过map
实现的,如文档中所述
map 按顺序为数组中的每个元素调用一次提供的回调函数,并根据结果构造一个新数组
与reduce
的描述形成对比:
reduce(( 方法对累加器和数组的每个值(从左到右(应用一个函数,以将其减少到单个值。
(强调我的(所以你看,虽然你可以操纵reduce
返回一个新数组,但它的一般用法是将数组减少到单个值。
因此,对于您的代码,这将是:
var store = [0,1,2,3,4];
var stored = store.map(function(pV){
console.log("pv: ", pV);
return pV;
});
比尝试在reduce
函数中使用push
或concat
重建新数组要简单得多。
这是相同的答案,但我只想说明使用 reduce ()
,语法也可以使用 ES6 简化为一行代码:
var store = [0,1,2,3,4];
var stored = store.reduce((pV,cV) => [...pV, cV], []);
console.log(stored);
如果您需要为每个迭代的项目返回一个包含多个项目的数组,reduce()
会很有用:
var inputs = media.reduce((passedArray, video) => {
passedArray.push("-i");
passedArray.push(video.filepath);
return passedArray;
}, []);
在这里,它用于构建 FFmpeg 的输入数组;
[{ name: "bob", filepath: "1.mp4" }, { name: "sue", filepath: "3.mp4" }]
=> ["-i", "1.mp4", "-i", "2.mp4]
Array.prototype.push 方法返回数组的新长度。
Array.prototype.concat 方法将新元素插入数组并返回数组,以便可以进一步处理。这就是你需要用reduce做的:在下一次迭代中传递修改后的数组。
你总是可以使用解构:
var store = [0,1,2,3,4];
var stored = store.reduce(function(pV,cV,cI){
console.log("pv: ", pV);
return [...pV, cV];
},[]);
console.log(stored);
- 对象数组返回自最近日期以来的最高总体值
- 从多维数组返回嵌套数组
- 为什么当我点击<a>使用纯javascript;这个“;返回url,数组返回“url”;未定义”;
- 带多维数组返回字符串的json_encode;阵列”;而不是数据
- 如何将 AJAX 响应作为 JavaScript 数组返回
- 我正在尝试在 JS 中制作这个随机名称生成器.数组返回未定义
- .push() 多个对象进入 JavaScript 数组返回 'undefined'
- 如何按属性从可观察数组返回项
- 通过jquery发送的关联php数组返回[对象对象]
- 从 Javascript 中的对象数组返回单个属性的数组
- 循环遍历对象数组返回“未定义”
- 拼接数组返回空的序列
- Javascript 多维数组返回第一个值,然后失败
- Json 数组返回空值
- 从下划线.js中的数组返回一系列值
- for 语句不从数组返回值
- MongoDB从数组返回特定字段
- 试图将数组返回到表中的列表中
- Javascript中的二维数组返回未定义的数组
- 将函数数组作为布尔值数组返回