【问题标题】:group and sum json object javascript分组和求和 json 对象 javascript
【发布时间】:2017-01-25 04:11:23
【问题描述】:

我想按“topic_id”对 json 对象进行分组,并对每个“topic_id”的“分数”求和。

我有这样的 json 对象

{
 "topic_id": {
   "0": 1,
   "1": 1,
   "6": 2,
   "8": 2,
   "12": 3,
   "13": 3,
   "18": 4,
   "20": 4,
},
   "score": {
   "0": 1,
   "1": 3,
   "6": 2,
   "8": 3,
   "12": 3,
   "13": 1,
   "18": 3,
   "20": 3,
}
}

我的结果应该是

{
"topic_id" : {
   "0" : 1,
   "1" : 2,
   "2" : 3,
   "3" : 4,
},
"score" : {
   "0" : 4,
   "1" : 5,
   "2" : 4,
   "3" : 6,
}
}

希望任何人都可以帮助我。

非常感谢。

【问题讨论】:

    标签: javascript angularjs arrays object


    【解决方案1】:

    您可以使用Array#reduce方法来生成对象。

    var data = {"topic_id": {"0": 1, "1": 1, "6": 2, "8": 2,  "12": 3, "13": 3, "18": 4, "20": 4, },"score": { "0": 1,  "1": 3, "6": 2, "8": 3, "12": 3, "13": 1, "18": 3,  "20": 3, }};
    
    // variable for holding the index reference of id
    var ref = {},
      // counter variable for property name, you can avoid if you are using array  
      i = 0;
    
    console.log(
      // get kesy of topic_id
      Object.keys(data.topic_id)
      // iterate over the property names
      .reduce(function(obj, k) {
        // check id refernce present already
        if (data.topic_id[k] in ref) {
          // if present then update the score
          obj.score[ref[data.topic_id[k]]] += data.score[k];
        } else {
          // if not present add reference in the ref object
          ref[data.topic_id[k]] = i++;
          // add entry in topic_id
          obj.topic_id[ref[data.topic_id[k]]] = data.topic_id[k];
          // add score value
          obj.score[ref[data.topic_id[k]]] = data.score[k];
        }
        // return the object reference
        return obj;
        // set initial value as our prefered object format
      }, {topic_id: {}, score: {}})
    )

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-24
      • 2013-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-26
      • 1970-01-01
      相关资源
      最近更新 更多