【问题标题】:Counting Occurrences of Object Values计算对象值的出现次数
【发布时间】:2017-05-30 04:21:58
【问题描述】:

我正在尝试遍历 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/

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

【问题讨论】:

    标签: javascript json


    【解决方案1】:

    另一种表达方式:

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

    Array.reduce() 对数组的每个元素调用一个回调,将前一个调用的返回值作为第一个参数传递给下一个。 (末尾的{}是初始值,传入第一次调用)

    所以这正是你所做的——创建一个空对象,遍历数组,并在对象内累积总数。它只是简单地做。

    【讨论】:

    • 不错的方法,非常优雅!感谢您抽出宝贵时间发布此内容。我决定改用这种方法。
    • 你会如何做同样的事情,但不是一个对象 {key: count, key2: count} 我想返回一个数组 [{key:count}, {key2:count}]。这可能吗?
    • 最简单的方法是使用答案中的代码作为第一步(收集总和),然后转换为您想要的形式作为第二步。
    【解决方案2】:

    没关系,漫长的一天。

    我发现我忘记访问属性city

    解决方法: obj[json[i].city]

    谢谢!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-20
      • 2012-03-24
      • 2020-01-20
      • 2010-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多