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)
筛选
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)
只需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)
使用 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)
| 归档时间: |
|
| 查看次数: |
957 次 |
| 最近记录: |