计算对象值的出现次数

时间:2015-04-30 01:15:02

标签: javascript json

我正在尝试遍历JSON文件中的一些数据并计算相同城市/事件的数量......

var json = [
  { "city": "California" },
  { "city": "California" },
  { "city": "California" },
  { "city": "Texas" },
  { "city": "Florida" }
];

var obj = {};

for (var i = 0, j = json.length; i < j; i++) {
  if (obj[json[i]]) {
    obj[json[i]]++;
  }
  else {
    obj[json[i]] = 1;
  } 
}

console.log(obj);

JSFiddle: http://jsfiddle.net/f2939ucw/

问题是返回的对象只返回数组中的对象数,而不是返回相同的城市数。

2 个答案:

答案 0 :(得分:4)

另一种表达方式:

json.reduce(function(sums,entry){
   sums[entry.city] = (sums[entry.city] || 0) + 1;
   return sums;
},{});

Array.reduce()在数组的每个元素上调用一个回调函数,将前一个调用的返回值作为第一个参数传递给下一个。 (最后的{}是初始值,传递给第一个调用)

所以这正是你所做的 - 创建一个空对象,迭代数组,并在对象内累积总数。它只是简洁地做到了。

答案 1 :(得分:3)

没关系,漫长的一天。

我注意到我忘了访问 city

这个属性

修复: OBJ [JSON [I]。市]

谢谢!