如何使用此数组乘以嵌套的values
数组的长度:
const options = [
{
name: "Colors",
values: [{
label: "Blue"
},
{
label: "Red"
}]
},
{
name: "Sizes",
values: [{
label: "Small"
},
{
label: "Large"
}]
}
]
我的代码:
const options = [
{
name: "Colors",
values: [
{
label: "Blue"
},
{
label: "Red"
}
]
},
{
name: "Sizes",
values: [
{
label: "Small"
},
{
label: "Large"
}
]
}
];
const multiply = options.reduce((a, b) => a * b.values.length, 0);
console.log(multiply);
我尝试过使用reduce但总是返回0.它应该返回ex。 4
操场:https://codesandbox.io/s/08jrnr72w
编辑:谢谢大家的答案,我错过了初始位置......
reduce函数需要初始值。您提供的初始值为0.如果将0乘以任何值,则得到0。
你应该用1初始化你的累加器。那应该修复它。
但是你可能需要做更多,即处理边缘条件。例如,在某一点上,您可能得到0作为一个特定对象的长度,在这种情况下,您的累加器将评估为0。
你需要用1来初始化Array.prototype.reduce
用于乘法(乘以零总是最终为零):
const multiply = options.reduce((a, b) => a * b.values.length, 1);
将它们映射到长度,然后减少结果。
const options = [
{
name: "Colors",
values: [{
label: "Blue"
},
{
label: "Red"
}]
},
{
name: "Sizes",
values: [{
label: "Small"
},
{
label: "Large"
}]
}
]
const multValues = options.map(opt => opt.values.length).reduce((a,b) => a*b);
console.log(multValues)
将你的起始值更改为1
为0
时,任何东西都是0
(因此你的累加器(a
)将永远是0
):
const options=[{name:"Colors",values:[{label:"Blue"},{label:"Red"}]},{name:"Sizes",values:[{label:"Small"},{label:"Large"}]}];
// change starting value -------------------------------------\/
const multiply = options.reduce((a, b) => a * b.values.length, 1);
console.log(multiply);