如何在 JavaScript 中使用带条件的数组减少?

新手上路,请多包涵

所以我有一个数组

const records = [
    {
        value: 24,
        gender: "BOYS"
    },
    {
        value: 42,
        gender: "BOYS"
    },
    {
        value: 85,
        gender: "GIRLS"
    },
    {
        value: 12,
        gender: "GIRLS"
    },
    {
        value: 10,
        gender: "BOYS"
    }
]

我想得到 sum 所以我使用了 JavaScript 数组 reduce 函数并做对了。这是我的代码:

 someFunction() {
  return records.reduce(function(sum, record){
    return sum + record.value;
  }, 0);
}

使用该代码,我得到正确的值 173 。现在我想要做的是将所有的总和只分配给那些拥有 "BOYS" 性别的对象。

我尝试了类似的东西

someFunction() {
  return records.reduce(function(sum, record){
    if(record.gender == 'BOYS') return sum + record.value;
  }, 0);
}

但我什么也得不到。我在这里错过了什么吗?任何帮助将非常感激。

原文由 wobsoriano 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 266
2 个回答

当您从 reduce 函数返回任何内容时,它会返回 undefined 和 undefined + 1 === NaN。您应该在减少之前过滤数组。

 records.filter(({gender}) => gender === 'BOYS')
    .reduce((sum, record) => sum + record.value)

原文由 T4rk1n 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果您的条件不匹配,您需要返回当前总和而不是 undefined

否则,您不会将累加器返回到 reduce 函数并最终添加 unefined + record.value 匹配时或 undefined + undefined 不匹配时.

尝试这个:

 <script>
  const records = [{
      value: 24,
      gender: "BOYS"
    },
    {
      value: 42,
      gender: "BOYS"
    },
    {
      value: 85,
      gender: "GIRLS"
    },
    {
      value: 12,
      gender: "GIRLS"
    },
    {
      value: 10,
      gender: "BOYS"
    }
  ];

  function someFunction() {
    return records.reduce(function(sum, record) {
     return (record.gender !== 'BOYS') ? sum : sum + record.value;

    }, 0);
  }
  console.log(someFunction());
</script>

原文由 Alexander Higgins 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题