计算嵌套Json中的唯一值

时间:2017-04-07 18:06:25

标签: javascript json counting

{
    "response_code": "100",
    "total_orders": "302",
    "order_ids": "930777,930783,930788,930791,930793",
    "data": {
        "930777": {
            "response_code": "100",
            "acquisition_date": "2017-04-07 00:06:29",
            "ancestor_id": "930777",
            "affiliate": "1038"
        },
        "930783": {
            "response_code": "100",
            "acquisition_date": "2017-04-07 00:07:59",
            "ancestor_id": "930783",
            "affiliate": "1040"
        },
        "930788": {
            "response_code": "100",
            "acquisition_date": "2017-04-07 00:17:04",
            "ancestor_id": "930788",
            "affiliate": "1038"
        },
        "930791": {
            "response_code": "100",
            "acquisition_date": "2017-04-07 00:20:31",
            "ancestor_id": "930791",
            "affiliate": "1030"
        },
        "930793": {
            "response_code": "100",
            "acquisition_date": "2017-04-07 00:24:34",
            "ancestor_id": "930793",
            "affiliate": "1038"
        }
    }
}

您好我从API调用了以上返回的JSON。我想知道联盟的最佳方法是什么。我希望得到像

这样的结果
Affiliate | Number
1038      | 3
1040      | 1
1030      | 1

有时返回API最多可能包含4000条记录。我认为必须有一个可以在短时间内完成工作的图书馆

由于

3 个答案:

答案 0 :(得分:0)

您可以使用reduce上的Object.keys循环播放该对象并累积结果,如下所示:

var obj = {"response_code":"100","total_orders":"302","order_ids":"930777,930783,930788,930791,930793","data":{"930777":{"response_code":"100","acquisition_date":"2017-04-07 00:06:29","ancestor_id":"930777","affiliate":"1038"},"930783":{"response_code":"100","acquisition_date":"2017-04-07 00:07:59","ancestor_id":"930783","affiliate":"1040"},"930788":{"response_code":"100","acquisition_date":"2017-04-07 00:17:04","ancestor_id":"930788","affiliate":"1038"},"930791":{"response_code":"100","acquisition_date":"2017-04-07 00:20:31","ancestor_id":"930791","affiliate":"1030"},"930793":{"response_code":"100","acquisition_date":"2017-04-07 00:24:34","ancestor_id":"930793","affiliate":"1038"}}}

var result = Object.keys(obj.data).reduce(function(acc, key) {  // for each key in the data object
  var aff = obj.data[key].affiliate;                            // get the affiliate of the according object
  if(acc[aff]) acc[aff]++;                                      // if we already have have a counter for this affiliate (aff) then increment the value from the accumulator acc
  else         acc[aff] = 1;                                    // otherwise start a counter for this affiliate (initialized with 1)
  return acc;
}, {});

console.log(result);

答案 1 :(得分:0)

您可以遍历所有键并构建具有关联号码作为键和出现次数的对象作为值。

// jshint esnext: true
const example = {'response_code':'100','total_orders':'302','order_ids':'930777,930783,930788,930791,930793','data':{'930777':{'response_code':'100','acquisition_date':'2017-04-0700:06:29','ancestor_id':'930777','affiliate':'1038'},'930783':{'response_code':'100','acquisition_date':'2017-04-0700:07:59','ancestor_id':'930783','affiliate':'1040'},'930788':{'response_code':'100','acquisition_date':'2017-04-0700:17:04','ancestor_id':'930788','affiliate':'1038'},'930791':{'response_code':'100','acquisition_date':'2017-04-0700:20:31','ancestor_id':'930791','affiliate':'1030'},'930793':{'response_code':'100','acquisition_date':'2017-04-0700:24:34','ancestor_id':'930793','affiliate':'1038'}}};
const results = {};

Object.keys(example.data).forEach(key => {
  const resultsEntry = results[example.data[key].affiliate];
  if (resultsEntry === undefined) {
    results[example.data[key].affiliate] = 1;
  }
  else {
    results[example.data[key].affiliate]++;
  }
});

console.log(results);
/* Console output formatting */
.as-console-wrapper { top: 0; }

答案 2 :(得分:0)

以下是使用下划线的示例:

var data = // Your json;

var groupedData = _.groupBy(data.data, function(d){return d.affiliate});

jsfiddle:http://jsfiddle.net/afj4dy6v/