Javascript 对数组对象中的数组项进行计数(组合计数)
考虑以下对象:Javascript 对数组对象中的数组项进行计数(组合计数),javascript,ecmascript-2017,Javascript,Ecmascript 2017,考虑以下对象: 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);
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
我正在寻找一种更简单(更干净,希望只有一行)的方法来实现这一点…只需获取值的长度即可
const测试={
foo:['foo','bar','foobar'],
酒吧:['foo','bar','foobar'],
foobar:['foo','bar','foobar']
};
让count=Object.values(test).flat().length;
控制台日志(计数)代码>您可以使用数组reduce,它非常接近于一行:
const count = Object.values(test).reduce((acc, cv) => acc + cv.length ,0)
正是我要找的那种东西!非常感谢。现在将测试工作完美-将尽快接受。这正是我发布这个问题的原因。我在谷歌上搜索了一些关键词,但什么也没找到。flat
方法是我以前从未遇到过的。。。非常感谢你!由于问题被特别标记为ES2017,我想指出,Array.prototype.flat()
实际上是在ES2019规范中引入的。@PatrickRoberts-啊,非常有趣!我之所以标记ES2017,是因为我想鼓励采用现代解决方案。ES2019甚至更好:-DI喜欢此解决方案,因为reduce()
是聚合的常规方法选择,并避免创建类似flat()
的临时数组。