2013-07-04 86 views
0

我有一個數組,在這個數組中會保存一個JavaScript對象。其他數組的數組數

var items = []; 

var item = { 
    id: data.id, 
    kategorie: data.kategorie, 
    name: data.name 
} 

items.push(item);  // that will be done few times 

現在我有這樣的

items[0] = id: 1, kategorie: "scheduled", name: "Test1" 
items[1] = id: 2, kategorie: "queued", name: "Test2" 
items[2] = id: 3, kategorie: "recorded", name: "Test3" 
items[3] = id: 4, kategorie: "recorded", name: "Test4" 
items[4] = id: 5, kategorie: "recorded", name: "Test5" 

我想指望這個數組項。至少最後一個數組應該是這樣的。

arrayFinal[0] = kategorie: "scheduled", counted: 1 
arrayFinal[1] = kategorie: "recorded", counted: 3 

我該怎麼做?

回答

1

查找到underscore.js的_.countBy常規:

counts = _.countBy(items, "kategorie"); 

這將創建一個對象,看起來像這樣:

{ 
    recorded : 3, 
    ... 
} 

要轉換成數組格式,你想_.map

arrayFinal = _.map(counts, function(v,k){ 
    return {kategorie: k, counted: v}; 
}); 

在那裏,你完成了。

+0

謝謝:):D –

1

如果你對linq很熟悉,你可以寫一個查詢。按kategorie分組,計數ID。

LINQ for JavaScript

例如:

var queryResult = Enumerable.From(items)  
.GroupBy("$.kategorie", "", 'key,e=>key+":"+e.Count()', "").ToJSON(); 
+0

我會看看它 –

2

這不會產生你精確的輸出,但它給你做什麼的想法:

var items = [], 
    arrayFinal = []; 

items[0] = { 
    id: 1, 
    kategorie: "scheduled", 
    name: "Test1" 
}; 
items[1] = { 
    id: 2, 
    kategorie: "queued", 
    name: "Test2" 
}; 
items[2] = { 
    id: 3, 
    kategorie: "recorded", 
    name: "Test3" 
}; 
items[3] = { 
    id: 4, 
    kategorie: "recorded", 
    name: "Test4" 
}; 
items[4] = { 
    id: 5, 
    kategorie: "recorded", 
    name: "Test5" 
}; 

items.forEach(function (v, i) { 
    if (typeof arrayFinal[v.kategorie] === 'undefined') { 
     arrayFinal[v.kategorie] = 1; 
    } else { 
     arrayFinal[v.kategorie] += 1; 
    } 
}); 
+0

這是一個線索:)謝謝 –

0

如果你認爲一個點和實驗,你會這樣做。

  1. 創建一個關聯數組kategorieCount
  2. 迭代items。如果有kategorieCount[items[i].name]增加它,如果不是 - 創建i的元素,然後增加值。
  3. 創建一個數組arrayFinal
  4. 迭代kategorieCount。把鑰匙放在arrayFinal[i].kategoriearrayFinal[i].counted的值。
1
var items = [ 
    { id: 1, kategorie: "scheduled", name: "Test1" }, 
    { id: 2, kategorie: "queued", name: "Test2" }, 
    { id: 3, kategorie: "recorded", name: "Test3" }, 
    { id: 4, kategorie: "recorded", name: "Test4" }, 
    { id: 5, kategorie: "recorded", name: "Test5" } 
]; 

var index, 
    arrayFinal = []; 
arrayFinal.contains = function(kategorie) { 
    for(var i = 0, len = arrayFinal.length; i < len; i++) { 
     if(arrayFinal[i].kategorie === kategorie) { 
      return i; 
     } 
    } 
    return false; 
}; 

for(var i = 0, len = items.length; i < len; i++) { 
    if(index = arrayFinal.contains(items[i].kategorie)) { 
     arrayFinal[index].counted++; 
    } else { 
     arrayFinal.push({ kategorie: items[i].kategorie, counted: 1 }); 
    } 
} 
+0

它返回我所有我的項目與計數1 –

+0

我剛剛在控制檯與你提供的'items'數組和''記錄''有3在計數。我將添加items數組,以便您可以檢查它。 – NicoSantangelo