添加JavaScript数组的Object属性值以获取总计数

时间:2016-08-20 17:31:57

标签: javascript

基于如下所示的JavaScript对象数组,是否可以将所有项的count属性上的数字值相加并存储在变量中作为总计数而不迭代数组?

var category_names_array = [
  {name: 'cat1', count: 13},
  {name: 'cat2', count: 23},
  {name: 'cat3', count: 33}
];

4 个答案:

答案 0 :(得分:1)

很清楚迭代是什么意思。您必须访问阵列的所有索引才能执行此操作。如果您只想避免for循环,请使用Array.prototype.reduce函数。

var total = category_names_array.reduce(function(a, b){
    return a + b.count;
}, 0);

如果我们将迭代定义为对数组索引的有序访问,那么我们必须迭代数组,如果我们想要处理它的所有索引。甚至使用JSON对对象进行字符串化,然后过滤和评估字符串仍在迭代--JSON必须遍历数组以对其进行字符串化。无论你做什么,你都必须迭代数组的索引来处理它。请注意,即使添加两个整数也是某种迭代 - 您迭代它们的位以将它们组合在一起。

答案 1 :(得分:0)

是的,你可以。

package main

import (
    "os/exec"
    "sync"
)

func main() {
    var lock sync.Mutex
    cmd := exec.Command("sleep", "10")

    lock.Lock()
    if err := cmd.Start(); err != nil {
        panic(err)
    }
    lock.Unlock()
    go func() {
        cmd.Process.Kill()
    }()

    cmd.Wait()
}

我的,这是多么可读。但是ooops,现在我们需要写sum(counts(array)) 。最简单的方法是

counts

function counts(array) { return array.map(elt => elt.count); } 构成"迭代"?取决于你的定义。让我们说不,因为迭代发生在引擎内部!!

剩下的就是写map。我们将此作为练习留给读者。

答案 2 :(得分:0)

您可以使用递归方法



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));




答案 3 :(得分:0)

如果没有 迭代数组 ,就无法实现您的要求。

您希望实现的是 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)