对象数组中的元素数量统计(合并计数)

3

请考虑以下对象:

const test = {
    foo: ['foo', 'bar', 'foobar'],
    bar: ['foo', 'bar', 'foobar']
    foobar: ['foo', 'bar', 'foobar']
};

如何获取上述对象中每个数组中所有项目的组合计数?

我知道可以使用以下类似方法:

let count = 0;

Object.values(test).forEach(value => count += value.length);

console.log(count) // Expected result: 9

我正在寻找一种更简单(更干净,希望是一行代码)的方法来实现这个目标...
2个回答

9

只需获取 flat 值的长度。

const test = {
    foo: ['foo', 'bar', 'foobar'],
    bar: ['foo', 'bar', 'foobar'],
    foobar: ['foo', 'bar', 'foobar']
};

let count = Object.values(test).flat().length;

console.log(count);


正是我需要的东西!谢谢!现在将进行测试。 - Ben Carey
完美运作 - 我会尽快接受。这正是我发布这个问题的原因。我在谷歌上搜索了一些关键词,但没有找到任何东西。flat方法是我以前从未遇到过的东西...非常感谢! - Ben Carey
由于问题特别标记为ES2017,我想指出Array.prototype.flat()实际上是在ES2019规范中引入的。 - Patrick Roberts
@PatrickRoberts - 哦,非常有趣!我只标记了ES2017,因为我想鼓励现代解决方案。ES2019甚至更好 :-D - Ben Carey

2
你可以使用数组的reduce方法,它可以接近于一行代码实现:
const count = Object.values(test).reduce((acc, cv) =>  acc + cv.length ,0)

我喜欢这个解决方案,因为reduce()是聚合的传统方法选择,避免了像flat()一样创建临时数组。 - Patrick Roberts

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接