【问题标题】:Count number of items in an array of objects with a specific property value (JavaScript)计算具有特定属性值的对象数组中的项目数 (JavaScript)
【发布时间】:2015-06-10 17:46:29
【问题描述】:

我有一个对象数组。请注意,“created”有时不止一次具有相同的值。另请注意,“状态”有时为“0”:

var array = [
{"created":"Jan 1","status":1},
{"created":"Jan 1","status":1},
{"created":"Jan 2","status":1},
{"created":"Jan 3","status":0},
{"created":"Jan 4","status":1},
{"created":"Jan 4","status":1}
];

我想要一个新的对象数组,如下所示:

var newArrayA = [
{"Jan 1":2},
{"Jan 2":1},
{"Jan 3":0},
{"Jan 4":2}    
];

或者像这样的多维数组(我不确定哪个更适合 D3.js):

var newArrayB = [
["Jan 1",2],
["Jan 2",1],
["Jan 3",0],
["Jan 4",2]    
];

因此,当“status”为“1”时,它会计算相同的“created”数量。当状态为“0”时,也包括在内。

我该怎么做?这是我目前所拥有的JSFIDDLE。这是怎么处理的?还是我错过了一些简单的解决方案?谢谢!

【问题讨论】:

标签: javascript arrays object d3.js


【解决方案1】:

D3 可以处理任何一种结果格式——它稍微取决于你想用它做什么。无论如何,这里有一些用于生成任一格式的示例代码:

var result = {};
array.forEach(function(i) {
    if (!result.hasOwnProperty(i.created)) {
        result[i.created] = 0;
    }
    if (i.status === 1) {
        result[i.created] += 1;
    }
});

var newArrayA = Object.keys(result)
                      .map(function(k) {
                          var o={};
                          o[k] = result[k];
                          return o;
                      })

var newArrayB = Object.keys(result)
                      .map(function(k) { return [k,result[k]] })

【讨论】:

  • 非常感谢!!你有更好的逻辑,并在语法上帮助了我很多。非常棒,谢谢你!
  • Answered JSFIDDLE 用于在控制台中检查
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-02-26
  • 2022-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多