我编写了一种方法来计算数组中“启用”设置为“真”的对象数量。
每次在数组中找到“启用”设置为“真”的对象时,我都会加1来计数。
在不使用“计数器”变量而改为使用reduce或filter的情况下,如何实现呢?
这是我的代码:
function getCount() {
const arr =[[{ "enabled": true }], [{ "enabled": false}, {"enabled": true}]];
var count = 0;
arr.forEach(function(ar){
ar.forEach(function(obj){
if(obj.enabled) {
count++;
}
})
});
return count;
}
答案 0 :(得分:2)
下面看一下,我添加了一条评论:
[].concat(...arr) /* flatten the array */
.filter(item => item.enabled) /* return only enabled: true */
.length /* get the count */
const arr = [
[{
"enabled": true
}],
[{
"enabled": false
}, {
"enabled": true
}]
];
var enabledCount = [].concat(...arr).filter(item => item.enabled).length
console.log(enabledCount)
或者如果需要,可以使用reduce
const arr = [
[{
"enabled": true
}],
[{
"enabled": false
}, {
"enabled": true
}]
];
var enabledCount = arr.reduce(
(accumulator, currentValue) => accumulator.concat(currentValue), []
).filter(item => item.enabled).length
console.log(enabledCount)
答案 1 :(得分:1)
这样的作品行吗?
const arr =[[{ "enabled": true }], [{ "enabled": false}, {"enabled": true}]];
const enabledArray = arr.map(function(item) {
return item.filter(function(subItem){
return subItem.enabled === true;
})
})
const enabledItems = enabledArray.length;
答案 2 :(得分:1)
您可以这样做:
const arr = [[{ "enabled": true }], [{ "enabled": false }, { "enabled": true }]];
console.log(
arr.reduce(
// Flatten the array of arrays
(acc, curVal) => acc.concat(curVal), []
).filter(
// Filter so you have an array with
// objects that have 'enable': true
(obj) => Object.is(obj['enabled'], true))
// and then return the length of it
.length
);
答案 3 :(得分:0)
在我看来,使用辅助 reduce
函数给出了最简单的实现:
const arr =[
[
{"enabled": true},
{"enabled": true}
],
[
{"enabled": false},
{"enabled": true},
{"enabled": true}
]
];
// Helper function to count inner arrays
const r = (i) => i.reduce( (p, c) => c.enabled ? p = p + 1 : p, 0)
const count = arr.reduce( (p, c) => p + r(c), 0) // Output: 4