使用javascript中的reduce或filter计算对象数

时间:2018-10-31 12:49:32

标签: javascript multidimensional-array filter ecmascript-6 reduce

我编写了一种方法来计算数组中“启用”设置为“真”的对象数量。

每次在数组中找到“启用”设置为“真”的对象时,我都会加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;           
}

4 个答案:

答案 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