如何统计数组内所有对象的全部项目(含treats特殊统计规则)
简便统计数组项目数量的方案
数据结构
const data = [ { treats: [ { id: "1", name: "treat 1", variants: ["one", "two", "three"], all_vars: false }, { id: "2", name: "treat 2", variants: ["one", "two", "three"], all_vars: true }, { id: "3", name: "treat 3", variants: ["one", "two", "three"], all_vars: true } ], packs: [ { id: "1", name: "pack 1" }, { id: "2", name: "pack 2" }, { id: "3", name: "pack 3" } ], membs: [ { id: "1", name: "mem 1" }, { id: "2", name: "mem 2" }, { id: "3", name: "mem 3" } ] } ];
统计规则
- treats:每个对象若
all_vars为false,统计为1 + variants.length(自身1个 + 所有变体数量);若all_vars为true,仅统计为1 - packs、membs:直接统计数组长度
- 输出各分类统计结果及总数
简洁实现代码
const [dataset] = data; // 统计treats const treatsCount = dataset.treats.reduce((sum, item) => { return sum + (item.all_vars ? 1 : (1 + item.variants.length)); }, 0); // 统计packs和membs const packsCount = dataset.packs.length; const membsCount = dataset.membs.length; // 计算总数 const total = treatsCount + packsCount + membsCount; // 输出结果 console.log(`treats: ${treatsCount}`); console.log(`packs: ${packsCount}`); console.log(`membs: ${membsCount}`); console.log('-----------'); console.log(`Total: ${total}`);
输出结果
treats: 6 packs: 3 membs: 3 ----------- Total: 12
这个方案用reduce处理treats的特殊统计逻辑,其他数组直接取长度,代码简洁高效,线性遍历的时间复杂度为O(n),完全满足需求。
内容的提问来源于stack exchange,提问作者MCM13
相关产品推荐
相关产品推荐

