获取json对象列表中最常见的属性值的计数

时间:2018-02-12 15:45:06

标签: javascript d3.js

给出类似

的数据
var data = [
    {
        "a" : "x"
        ... (other properties)
    },
    {
        "a" : "x"
        ... (other properties)
    },
    {
        "a" : "y"
        ... (other properties)
    },
]

最常见的“a” - 属性值的计数为2,(对于“x”)。

现在,从data得到这个最简洁的方法是什么?

我假设可能有一种很好的方法来生成不同计数的数组,在这种情况下是[ 2 , 1 ],然后在此运行Math.max(...array)

但我似乎无法找到一种干净的方式来做到这一点?

1 个答案:

答案 0 :(得分:1)

var data = [{
    a: "x"
  },
  {
    a: "x"
  },
  {
    a: "y"
  },
]

var countPropertyValues = {};
data.forEach(function(obj) {
  if (countPropertyValues.hasOwnProperty(obj.a)) {
    countPropertyValues[obj.a]++;
  } else {
    countPropertyValues[obj.a] = 1;
  }
});

console.log(countPropertyValues);

var maxPropertyOccurence=0;
var maxPropertyValue;

for(var property in countPropertyValues){

    if(countPropertyValues[property]>maxPropertyOccurence){
      maxPropertyOccurence=countPropertyValues[property];
      maxPropertyValue=property;
    }
}

console.log(maxPropertyOccurence);
console.log(maxPropertyValue);