找到布尔值JavaScript对象数组的总和

时间:2017-01-19 10:39:45

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

您好我想在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函数来计算所有状态值的总和

我希望仅在所有状态为true时将整体状态显示为true ,否则它应为false

4 个答案:

答案 0 :(得分:16)

var result = myObj.reduce((sum, next) => sum && next.status, true);

如果每个值都为真,则返回true。

答案 1 :(得分:6)

如果你想总结一下,day项值取决于status标志,这可能如下所示:

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

更新1

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

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

答案 2 :(得分:0)

如果必须使用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);

答案 3 :(得分:0)

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

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