计算对象值的出现

Miu*_*shi 3 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);
Run Code Online (Sandbox Code Playgroud)

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

问题在于返回的对象仅返回数组中对象的数量,而不返回相同次数的城市。

S M*_*han 5

措辞的另一种方式:

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

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

因此,这正是您所做的事情-创建一个空对象,遍历数组,并在对象内部累积总计。它只是简洁地做。