【问题标题】:find sum of Boolean values JavaScript object array查找布尔值的总和 JavaScript 对象数组
【发布时间】:2017-06-04 00:42:09
【问题描述】:

您好,我正在尝试在 JavaScript 中查找对象数组中布尔值的总和

我的json就像是

var myoBj = [{
  "id": 1,
  "day": 1,
  "status": true
}, {
  "id": 2,
  "day": 1,
  "status": false
}, {
  "id": 3,
  "day": 1,
  "status": false
}, {
  "id": 4,
  "day": 3,
  "status": false
}];

我想要在 JavaScript/typescript 中使用 reduce 函数得到所有 status 值的总和

我只想在所有状态都为真时显示整体状态为真,否则它应该为假

【问题讨论】:

  • 布尔值的总和,你的意思是什么?
  • @PranavCBalan 我只想在所有状态都为真时显示整体状态为真,否则它应该为假
  • 为什么.reduce()..?有一个专门为这项工作量身定制的数组函子,称为.every()

标签: javascript arrays typescript javascript-objects typescript2.0


【解决方案1】:
var result = myObj.reduce((sum, next) => sum && next.status, true);

如果每个值都为真,这应该返回真。

【讨论】:

  • 这个解决方案看起来很简洁,谢谢Balint
  • @SathyaV 也许简洁明了,但无法击败myObj.every(item => item.status)
【解决方案2】:

如果您想求和,可以说,day 项目值取决于 status 标志,如下所示:

var result = myObj.reduce((res, item) => item.status ? res + item.day : res, 0);

更新 1

对于所有状态都为真的整体状态,您应该使用每种方法:

var result = myObj.every(item => item.status);

【讨论】:

  • 我只想在所有状态都为真时显示整体状态为真,否则它应该为假
  • 感谢 TSV 的解决方案
【解决方案3】:

您可以将Array.some 与谓词a => !a.statusArray.every 与谓词a => a.status 一起使用。

如果您发现不匹配,它们中的任何一个都会短路,而Array.reduce 不会。

【讨论】:

    【解决方案4】:

    如果您必须使用reduce,您可以利用x*false == 0这一事实,因此您可以执行以下操作:

    const myObj=[{id:1,day:1,status:true},{id:2,day:1,status:false},{id:3,day:1,status:false},{id:4,day:3,status:false}],
    
    res = !!myObj.reduce((bool, {status}) => bool*status, true);
    console.log(res);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-06-16
      • 2020-10-01
      • 2021-07-05
      • 1970-01-01
      • 2017-12-02
      • 2016-09-25
      • 2019-04-09
      • 1970-01-01
      相关资源
      最近更新 更多