我有一个JavaScript对象,其中包含2个具有不同true / false布尔值的对象,并希望过滤掉第一个对象,因为它具有所有错误值。
如果在任何情况下,任何键都为真,那么它应该保留,并且不应该过滤掉数据对象。
我希望仅根据任何真值保留第二个对象,因为您可以看到它具有一些“真实”值。
让我进一步解释一下,因为你可以看到'data'的第一个对象,其所有布尔值都为'false',应该省略,而end result应该只有第二个数据对象,因为它是一些'true'值
"data": [{
"Products": "Mobile",
"Australia": false,
"Austria": false,
"Belgium": false,
"Canada": false,
"China": false,
"India": false,
"Poland": false,
"Brazil": false,
"US": false
},
{
"Products": "Tablet",
"Australia": false,
"Austria": true,
"Belgium": false,
"Canada": false,
"China": false,
"India": true,
"Poland": false,
"Brazil": true,
"US": false
}]
最终结果应该只是这样,它应该因为所有错误值而过滤第一个对象。
"data": [{
"Products": "Tablet",
"Australia": false,
"Austria": true,
"Belgium": false,
"Canada": false,
"China": false,
"India": true,
"Poland": false,
"Brazil": true,
"US": false
}]
欢迎使用原始JavaScript或Underscore.js的任何建议。
答案 0 :(得分:4)
使用filter
和some
。
data.filter( // Filter the data array by
function(product) { // looking at each product in it
return Object.keys(product) // and for that product's keys
.some( // see if any of the
function(key) { // keys
return product[key] === true; // have a value of true
}
)
;
}
)
答案 1 :(得分:1)
使用下划线的版本:
var result = _.filter(data, function(product){
return _.some(product, function(value){
return _.isBoolean(value) && value;
});
});