添加对象属性值的JavaScript数组以获得总数
Add JavaScript Array of Object properties values to get a total count number
基于如下所示的JavaScript对象数组,是否有可能将所有项目的count属性上的数值加在一起并存储在一个变量中作为总数而不迭代数组?
var category_names_array = [
{name: 'cat1', count: 13},
{name: 'cat2', count: 23},
{name: 'cat3', count: 33}
];
这是核的,你说的迭代是什么意思?你必须访问数组的所有索引才能做到这一点。如果您只是想避免for
循环,那么使用Array.prototype.reduce
函数。
var total = category_names_array.reduce(function(a, b){
return a + b.count;
}, 0);
如果将迭代定义为对数组索引的有序访问,那么如果要处理数组的所有索引,就必须对数组进行迭代。即使使用JSON对对象进行字符串化,然后对字符串进行过滤和求值仍然是迭代的——JSON必须遍历数组来对其进行字符串化。无论您做什么,都必须遍历数组的索引来处理它。注意,即使将两个整数相加也是一种迭代——迭代它们的位以将它们相加。
可以。
sum(counts(array))
天哪,这是多么好读啊。但是,现在我们需要写counts
。最简单的方法是
function counts(array) { return array.map(elt => elt.count); }
map
是否构成"迭代"?取决于你的定义。让我们说不,因为迭代发生在引擎内部!!
剩下的就是写sum
。
如果不遍历数组,则不可能实现您所要求的。
你想要实现的是一个reduce操作,在我看来这是一个线性时间算法。也就是说,它保证遍历JS数组中的每个元素。
使用Lodash JS的示例解决方案
var category_names_array = [
{name: 'cat1', count: 13},
{name: 'cat2', count: 23},
{name: 'cat3', count: 33}
];
var total = _.reduce(category_names_array, function(totalCount,item) {
return totalCount + item.count;
},0);
复杂度O (n)
您可以使用递归方法
function sum(a, s) {
s = s || 0;
a = a.slice();
return a.length ? sum(a, s + a.pop().count) : s;
}
var category_names_array = [{ name: 'cat1', count: 13 }, { name: 'cat2', count: 23 }, { name: 'cat3', count: 33 }];
console.log(sum(category_names_array));
ES6
function sum(a) {
var f = (a, ...r) => (s += a.count, r.length && f(...r)),
s = 0;
f(...a);
return s;
}
var category_names_array = [{ name: 'cat1', count: 13 }, { name: 'cat2', count: 23 }, { name: 'cat3', count: 33 }];
console.log(sum(category_names_array));
相关文章:
- 如何遍历包含对象的数组-javascript
- 保存数组javascript
- 查找数组javascript中包含的元素类型
- 算法:从数组(javascript/angular)中按当前日期获取上一个和下一个事件
- 从多维数组javascript中提取特定值
- 如何在数组javascript中选择伪随机值
- 拆分字符串数组(JavaScript)后未定义
- 从数组JavaScript中删除并返回最后n个项的最快方法
- 使用条件for循环更新数组-Javascript
- 从数组javascript创建新对象
- 用数组(javascript)中的值替换regex捕获
- 从数组[Javascript]的总长度中减去一个干净的数字
- 将一个字符串数组解析为一个新的数组javascript
- 如何将对象转换为对象数组javascript
- 赢得't循环数组javascript
- 从不同的数组 JavaScript 中获取值
- 多维数组 JAVASCRIPT 出了点问题
- 可以't分配给一个对象数组javascript
- 比较数组JavaScript中的对象
- 如何完成缺少(连续)元素的数组|Javascript