我正在尝试遍历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/
问题是返回的对象只返回数组中的对象数,而不是返回相同的城市数。
答案 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]。市]
谢谢!