2015-12-04 52 views
0

我可以console.log我的數據在前端,但我需要做一些邏輯來組織這些數據,我不確定這種類型的問題最好的方法是什麼。我需要對每個項目的分析數量進行「計數」。因此,每個對象下面都有一個project_id和一個analysis_id。因此,必須有一種方法可以爲每個對象創建一個計數變量,用javascript表示每個項目有多少分析。任何幫助是極大的讚賞。使用javascript組織數據在前端使用javascript


enter image description here

回答

0

你可以做這樣的事情。爲每個要迭代的對象創建一個對象,檢查您是否擁有該project_id的現有屬性。如果沒有初始化爲0.然後加1。

var projectCounts = {}, index = 0; length = someData.length; 
for (; index < length; index++) { 
    var projectId = someData[index].project_id; 
    if (!projectCounts['Project' + projectId]) { 
    projectCounts['Project' + projectId] = 0; 
    } 
    projectCounts['Project' + projectId]++ 
} 

小提琴:http://jsfiddle.net/Lbohgnxs/

編輯:所以,如果你願意,你可以只通過每次迭代設置計數每個這些計數對象。由於對象只是對內存中某個點的引用,因此每個引用在循環完成後都會有最終值。

小提琴:http://jsfiddle.net/Lbohgnxs/1/

var projectCounts = {}, index = 0; length = someData.length; 
for (; index < length; index++) { 
    var projectId = someData[index].project_id; 
    if (!projectCounts['Project' + projectId]) { 
    projectCounts['Project' + projectId] = 0; 
    } 
    projectCounts['Project' + projectId]++ 
    someData[index].counts = projectCounts; 
} 

如果你不喜歡每天數,只是想具體的項目數,您可以創建一個計數對象,並使用該引用爲好。

小提琴:http://jsfiddle.net/Lbohgnxs/2/

var projectCounts = {}, index = 0; length = someData.length; 
for (; index < length; index++) { 
    var projectId = someData[index].project_id; 
    if (!projectCounts['Project' + projectId]) { 
    projectCounts['Project' + projectId] = {count: 0}; 
    } 
    projectCounts['Project' + projectId].count++ 
    someData[index].counts = projectCounts['Project' + projectId]; 
} 
+0

這是一個很好的想法,它只是創建一個全新的對象。我需要爲每個當前對象添加一個「count」變量,以便我可以將它們顯示在表中。 – Nodedeveloper101

+0

那麼你總是可以在你迭代的每個人身上設置這個對象,並且只需通過JavaScript中的引用傳遞,它們將在迭代每個對象時繼續更新。例如:http://jsfiddle.net/Lbohgnxs/1/ – AtheistP3ace

+0

如果你可以更新你的小提琴,這真的會幫助我理解,謝謝 – Nodedeveloper101

0

可以循環數組和更新項目的ID映射到他們的計數的對象:但是

// simplified sample data 
 
var analyses = [ 
 
    { 
 
    project_id: 1, 
 
    analysis_id: 10 
 
    }, 
 
    { 
 
    project_id: 2, 
 
    analysis_id: 11 
 
    }, 
 
    { 
 
    project_id: 3, 
 
    analysis_id: 12 
 
    }, 
 
    { 
 
    project_id: 3, 
 
    analysis_id: 13 
 
    } 
 
]; 
 

 
var counts = {}; 
 

 
analyses.forEach(function(el) { 
 
    var pid = el.project_id; 
 
    
 
    counts[pid] = counts[pid] || 0; // start at 0 if we haven't seen this project before 
 
    ++counts[pid]; 
 
}); 
 

 
console.log(counts); // {1: 1, 2: 1, 3: 2