2016-05-12 6 views
3

各要素の出現を列でカウントしたいと思います。以下のコードは、最初の列を数えます。{"dem":1,"rep":1,"ind":3} 1つのdemがあるので、最初の列に1 & 3 indと書いてあります。私は以下のコードを拡張したいので、1つの列だけでなく、各列のオブジェクト(上記のようなもの)になります。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

あなたは列のindividial数のオブジェクトで、集計のためarrrayを取ることができます。

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))) 
関連する問題