嗨,我正在尝试在 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/打字稿中的 reduce 函数获得所有状态值的总和
我想仅在所有状态都为真时才将整体状态显示为真,否则它应该是假的
var result = myObj.reduce((sum, next) => sum && next.status, true);
如果每个值都为 true,则这应该返回 true。
如果你想求和,比如说,根据status
标志day
项目值,这可能看起来像:
var result = myObj.reduce((res, item) => item.status ? res + item.day : res, 0);
更新 1
对于所有状态为真的总体状态,您应该使用每种方法:
var result = myObj.every(item => item.status);
如果必须使用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);
Array.some
与谓词a => !a.status
一起使用,也可以将Array.every
与谓词a => a.status
一起使用。
如果您发现不匹配,它们中的任何一个都会短路,而Array.reduce
则不会。