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

时间:2019-03-07 11:33:44

标签: javascript arrays

如何使用此数组乘以嵌套echo数组的长度:

values

我的代码:

const options = [
  {
    name: "Colors",
    values: [{
      label: "Blue"
    },
    {
      label: "Red"
    }]
  },
  {
    name: "Sizes",
    values: [{
      label: "Small"
    },
    {
      label: "Large"
    }]
  }
]

我尝试使用reduce,但是总是返回0。它应该返回ex。 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);

游乐场:https://codesandbox.io/s/08jrnr72w

编辑:感谢大家的回答,我错过了最初的职位...

4 个答案:

答案 0 :(得分:3)

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

您应该使用1初始化累加器。应该对其进行修复。

但是您可能需要做更多的事情,即处理边缘条件。例如,在某一点上,一个特定对象的长度可能为0,在这种情况下,累加器的计算结果为0。

答案 1 :(得分:2)

您需要使用1初始化Array.prototype.reduce以便进行乘法运算(乘以零总是以零结尾):

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

答案 2 :(得分: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)

答案 3 :(得分:1)

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);