2015-06-10 6 views
-1

У меня есть массив объектов. Обратите внимание, что «созданный» иногда имеет одно и то же значение более одного раза. Также отметим, что «статус» иногда «0»:Количество элементов в массиве объектов со специфическим значением свойства (JavaScript)

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]  
]; 

Так что, когда «статус» в «1», он подсчитывает количество «создано», что одни и те же. И когда статус «0», это также включено.

Как это сделать? Вот что у меня есть до сих пор JSFIDDLE. Это как подойти к нему? Или я пропустил какое-то простое решение? Благодаря!

+0

только что нашел здесь второй блок кода. исследуя ... http://stackoverflow.com/questions/17313268/find-the-number-of-occurrences-a-given-value-has-in-an-array – airwwwave

ответ

2

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]] }) 
+0

Большое спасибо! У вас намного лучшая логика, и мне очень помог синтаксис. Супер удивительное спасибо вам! – airwwwave

+0

[Ответил JSFIDDLE] (https://jsfiddle.net/airwwwave/9dyxskbd/) для проверки в консоли – airwwwave

Смежные вопросы