将嵌套数组长度相乘并返回单个值

问题描述 投票:0回答:4

如何使用此数组乘以嵌套的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

编辑:谢谢大家的答案,我错过了初始位置......

javascript arrays
4个回答
3
投票

reduce函数需要初始值。您提供的初始值为0.如果将0乘以任何值,则得到0。

你应该用1初始化你的累加器。那应该修复它。

但是你可能需要做更多,即处理边缘条件。例如,在某一点上,您可能得到0作为一个特定对象的长度,在这种情况下,您的累加器将评估为0。


2
投票

你需要用1来初始化Array.prototype.reduce用于乘法(乘以零总是最终为零):

const multiply = options.reduce((a, b) => a * b.values.length, 1);

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
投票

将你的起始值更改为10时,任何东西都是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);
© www.soinside.com 2019 - 2024. All rights reserved.