2016-05-12 8 views
3

Ich möchte die Vorkommen jedes Elements nach Spalte zählen. Mein Code unten zählt die erste Spalte und produziert {"dem":1,"rep":1,"ind":3} Wie es 1 Dem gibt, 1 rep & 3 ind in der ersten Spalte. Ich möchte meinen Code unten erweitern, so dass ich mit einem Objekt (wie oben) für jede Spalte, nicht nur für eine Spalte endet.JS. Schleife durch multidimensionales Array, um das Auftreten von Elementen in jeder Spalte zu zählen

Wie kann ich das bitte tun?

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

Antwort

1

Sie brauchen nur eine weitere Schleife auf Spalten iterieren:

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

Dankes-, das funktioniert perfekt! – mattnewbie

2

Sie können eine arrray zum Zählen nehmen, mit einem Objekt für die individial Anzahl der Spalten.

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

Danke das funktioniert perfekt! – mattnewbie

0

Dies ist nicht gerade eine elegante Lösung, aber man konnte leicht erweitern, was Sie schon gerade in einer Schleife getan haben, laufen

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))) 
Verwandte Themen