2016-05-12 60 views
3

我想按列計算每個元素的出現次數。我的以下代碼計算第一列,生成{"dem":1,"rep":1,"ind":3}由於第一列中有1個dem,1個代表& 3個ind。我想在下面擴展我的代碼,以便最終爲每列提供一個對象(如上所示),而不僅僅是一列。JS。遍歷多維數組來計算每列中元素的出現次數

我該怎麼做?

voters = 
     [["dem", "ind", "rep"], 
      ["rep", "ind", "dem"], 
      ["ind", "dem", "rep"], 
      ["ind", "dem", "rep"], 
      ["ind", "rep", "dem"]]; 


var columnArr = voters.map(function(row) { 
    return row[0]; 
}); 

count = {} 
columnArr.forEach(function(el){ 
    count[el] = count[el] + 1 || 1 
}); 

    document.write((JSON.stringify(count))); 

回答

1

你只需要另一個循環,反覆列:

voters = [ 
 
    ["dem", "ind", "rep"], 
 
    ["rep", "ind", "dem"], 
 
    ["ind", "dem", "rep"], 
 
    ["ind", "dem", "rep"], 
 
    ["ind", "rep", "dem"] 
 
]; 
 

 

 
count = {} 
 

 

 
for (var colIndex = 0; colIndex < voters[0].length; ++colIndex) { 
 
    var columnArr = voters.map(function(row) { 
 
    return row[colIndex]; 
 
    }); 
 
    
 
    console.log(columnArr); 
 

 
    count[colIndex] = {}; 
 
    columnArr.forEach(function(el) { 
 
     count[colIndex][el] = count[colIndex][el] ? count[colIndex][el] + 1 : 1; 
 
    }); 
 
} 
 

 
document.write((JSON.stringify(count)));

+0

感謝你,工作運行完美! – mattnewbie

2

可以採取arrray計數,與列individial計數的對象。

var voters = [["dem", "ind", "rep"], ["rep", "ind", "dem"], ["ind", "dem", "rep"], ["ind", "dem", "rep"], ["ind", "rep", "dem"]], 
 
    count = []; 
 

 
voters.forEach(function (a) { 
 
    a.forEach(function (b, i) { 
 
     count[i] = count[i] || {}; 
 
     count[i][b] = (count[i][b] || 0) + 1; 
 
    }); 
 
}); 
 

 
document.write('<pre>' + JSON.stringify(count, 0, 4) + '</pre>');

+0

謝謝你,完美的作品! – mattnewbie

0

這不正是一個完美的解決方案,但你可以很容易地擴展你已經做了什麼,只是在一個循環

voters = [ 
    ["dem", "ind", "rep"], 
    ["rep", "ind", "dem"], 
    ["ind", "dem", "rep"], 
    ["ind", "rep", "dem"] 
]; 

var colCounts = []; 

function countUsagesByColumn(numCols) { 
    var columnArr; 
    var count; 
    for (var i = 0; i < numCols; i++) { 
    columnArr = voters.map(function(row) { 
     return row[i]; 
    }); 

    count = {} 
    columnArr.forEach(function(el) { 
     count[el] = count[el] + 1 || 1 
    }); 
    console.log(count); 
    colCounts.push(count); 
    } 
} 

countUsagesByColumn(3); 

document.write((JSON.stringify(colCounts)))