2016-05-04 14 views
2

Ich habe folgendes Problem:Javascript: Looping durch die Zeichen der Elemente in einem Array

Schreiben Sie eine Funktion, die in einer Liste von Wörtern nimmt und gibt ein Objekt zurück, das Ihnen sagt, wie oft jeder Brief auftauchten.

So etwas wie folgt aus:

var data = ['hat', 'cat', 'dog']; 

wird:

var object = { 
    'a' : 2, 
    'h' : 1, 
    't' : 2, 
    'c' : 2, 
    'd' : 1, 
    'g' : 1 
}; 

Meine Lösung war bisher auf:

  1. mit einem leeren Objekt eine Funktion erstellen.
  2. Schleife durch alle Elemente des Arrays

Diese Schritte funktionieren nicht, wie ich glaube, sie waren:

  1. Schleife Versuchen Sie, durch die Charaktere von jeder Array-Element.
  2. Wenn das Zeichen des Array-Elements im Objekt nicht definiert ist, fügen Sie es ein und erhöhen Sie es auf eins. Andernfalls, wenn es bereits da ist, erhöhen Sie es erneut um eins.

Wohin gehe ich falsch? Oder bin ich weit weg?

+1

"* Wo bin ich dabei falsch *" - Sie "vergessen" lesen [fragen] – Amit

+0

fügen Sie den Code bitte –

+0

'join' das Array in eine Zeichenfolge, so dass Sie nicht zwei Schleifen verwenden müssen. – Andy

Antwort

1

Dies ist, was Sie suchen:

// Function that you need. 
 
function letterUsage(data) { 
 
    // Collector. 
 
    var result = {}; 
 
    
 
    // Loop. 
 
    for (var i = 0; i < data.length; ++i) { 
 
     for (var j = 0; j < data[i].length; ++j) { 
 
      var letter = data[i][j]; 
 
      if (result[letter]) { 
 
       result[letter] = result[letter] + 1; 
 
      } else { 
 
       result[letter] = 1; 
 
      } 
 
     } 
 
    } 
 

 
    return result; 
 
} 
 

 
// Prepare test. 
 
var data = ['hat', 'cat', 'dog']; 
 
var result = letterUsage(data); 
 

 
// Print result. 
 
console.log(result);

+1

Genau wie ich es wollte. Danke mein Herr! –

+0

Gern geschehen! – gevorg

1

Sie können dies tun mit einer Reduce nur erste join Array einen String und split es dann auf jeden Buchstaben

var data = ['hat', 'cat', 'dog']; 
 

 
data = data.join('').split('').reduce(function(sum, el) { 
 
    sum[el] = (sum[el] || 0) + 1; 
 
    return sum; 
 
}, {}); 
 

 
console.log(data)

1

Array.prototype.forEach Alternative:

var data = ['hat', 'cat', 'dog']; 
 

 
var object = {}; 
 

 
data.join('').split('').forEach(letter => { object[letter] = ++object[letter] || 1;}); 
 

 
document.querySelector('pre').textContent = JSON.stringify(object, 0, 4);
<pre></pre>

Verwandte Themen