如何计算数组中符合条件的所有对象?

Kit*_*Kit 3 javascript arrays function

我怎么能指望所有对象的数组匹配条件:is_read == true

这是我的数组的样子:

[
  {
    "id": 1,
    "is_read": true,
  },
  {
    "id": 2,
    "is_read": true,
  },
  {
    "id": 3,
    "is_read": false,
  },
  {
    "id": 4,
    "is_read": true,
  },
]
Run Code Online (Sandbox Code Playgroud)

Ben*_*Ben 9

筛选

const count = (arr, condition) => arr.filter(condition).length;

const arr = [ { is_read: true }, { is_read: false} ]
console.log(count(arr, (o) => o.is_read));
Run Code Online (Sandbox Code Playgroud)

数组#reduce

const count = (arr, condition) => arr.reduce((acc, c) => condition(c) ? ++acc : acc, 0);

const arr = [ { is_read: true }, { is_read: false } ]
console.log(count(arr, (o) => o.is_read));
Run Code Online (Sandbox Code Playgroud)

递归

const count = ([first, ...rest], condition, acc = 0) => 
           (condition(first) && ++acc, 
           rest.length ? count(rest, condition, acc) : acc);

const arr = [ { is_read: true }, { is_read: false } ]
console.log(count(arr, (o) => o.is_read));
Run Code Online (Sandbox Code Playgroud)


Mih*_*nut 6

只需filter通过传递callback函数来使用方法,并使用length应用于过滤结果的属性。

let data = [ { "id": 1, "is_read": true, }, { "id": 2, "is_read": true, }, { "id": 3, "is_read": false, }, { "id": 4, "is_read": true, }, ],
length = data.filter(function(item){
  return item.is_read;
}).length;
console.log(length);
Run Code Online (Sandbox Code Playgroud)

您也可以使用lambda表达式。

 let data = [ { "id": 1, "is_read": true, }, { "id": 2, "is_read": true, }, { "id": 3, "is_read": false, }, { "id": 4, "is_read": true, }, ],
length = data.filter(d => d.is_read).length;
console.log(length);
Run Code Online (Sandbox Code Playgroud)


Nim*_*mal 5

使用 Array.reduce

const r = (sum, obj) => sum + (obj.is_read == true ? 1 : 0);
const count = arr.reduce(r, 0);

console.log(count);
Run Code Online (Sandbox Code Playgroud)