我正在努力了解JavaScript中的Array.reduce()。我有一系列对象,我试图将.reduce()应用到,但我要回到一个单字母字符串数组。
目标:
["Stuff", "necklace", "ring", "bracelet"]
当前的对象数组
const productArray =
[
{
id: 1,
productTitle: "Necklace"
},
{
id: 2,
productTitle: "Ring"
},
{
id: 3,
productTitle: "Bracelet"
}
]
函数调用
const newStuff = productArray.reduce(function(a, currentValue) {
return [...a, ...currentValue.productTitle];
}, ["Stuff"])
我需要做些什么来指明我不想要" productTitle"分解成单个字母的字符串?我一直在寻找关于一系列对象的.reduce()的资源,但我还没有找到任何非常有帮助的东西。有什么指针吗?
答案 0 :(得分:0)
使用spread扩展到新数组到concatenate an array and value,将前一个数组扩展到新数组,并添加新项而不传播它。
const productArray = [{"id":1,"productTitle":"Necklace"},{"id":2,"productTitle":"Ring"},{"id":3,"productTitle":"Bracelet"}];
const newStuff = productArray.reduce((a, currentValue) =>
[...a, currentValue.productTitle], []);
console.log(newStuff);

在这种情况下,最好使用Array.map()
:
const productArray = [{"id":1,"productTitle":"Necklace"},{"id":2,"productTitle":"Ring"},{"id":3,"productTitle":"Bracelet"}];
const newStuff = productArray.map((currentValue) => currentValue);
console.log(newStuff);

答案 1 :(得分:0)
不要传播标题,按原样传递:
const newStuff = productArray.reduce(function(a, currentValue) {
return [...a, currentValue.productTitle];
}, ["Stuff"]);
...currentValue.productTitle
传播到一系列单独的字母中,您只想传播a
变量,这里是聚合。
答案 2 :(得分:0)
基本上字符串是可迭代的,因为iterator已实现并返回单个字符数组(如果使用spread syntax ...
。
扩展语法允许在可能需要零个或多个参数(用于函数调用)或元素(用于数组文字)的位置扩展数组表达式或字符串等迭代,或者对象要在需要零个或多个键值对(对象文字)的地方展开的表达式。
console.log([...'foo']);

答案 3 :(得分:0)
在这种情况下使用spread是不必要和低效的,因为它在每次迭代时都会从前一个创建一个新的累加器数组。您可以删除传播(并修复您的问题)并使用 concat 代替将其保持为单行。
但是,由于您只是在每次迭代时添加一个新值,因此应使用 push 。它需要一行代码,但可能比使用 concat 更有效。
var productArray = [{id: 1,productTitle: "Necklace"},
{id: 2,productTitle: "Ring"},
{id: 3,productTitle: "Bracelet"}
];
// Using concat
var newStuff = productArray.reduce((acc, value) =>
acc.concat(value.productTitle),
["Stuff"]);
console.log(newStuff);
// Using push
var newStuff = productArray.reduce((acc, value) => {
acc.push(value.productTitle);
return acc;
}, ["Stuff"]);
console.log(newStuff);

答案 4 :(得分:0)
其他答案指出了您的代码错误的原因。但我确实也想指出,Array.prototype.concat
已经涵盖了你所做的事情:
const productArray = [{"id":1,"productTitle":"Necklace"},{"id":2,"productTitle":"Ring"},{"id":3,"productTitle":"Bracelet"}];
const newStuff = productArray.reduce((a, val) => a.concat(val.productTitle), ['Struff']);
console.log(newStuff);
(当然,正如另一个答案所提到的,这听起来更像map
而不是reduce
,这可能无关紧要,因为您正在使用它来学习reduce
。)