2017-10-24 1 views
-1

Ich verwende den folgenden Code, um zu versuchen, das erste sich wiederholende Zeichen in einer Sequenz zu finden. Wenn ich den Code in meinem Browser ausführe und ihn in der Konsole bei der Funktion "letterArray.forEach" stoppe, sagt der Konsolenprotokollfehler, dass meine Eingaben für forEach undefiniert sind. Aber es scheint mir so, als würde forEach einfach die Eingaben von letterArray einzeln nehmen und sehen, ob sie eins sind, und das Ergebnis zurückgeben. Jeder weiß, warum es sagt mein forEach Schleife kann die Eingaben von meinem BriefArray nicht lesen?Wert übergeben in ForEach sagt undefined

function firstNotRepeatingCharacter(string) { 

    var letterArray = []; 
    letterArray['a'] = 0; 
    letterArray['b'] = 0; 
    letterArray['c'] = 0; 
    letterArray['d'] = 0; 
    letterArray['e'] = 0; 
    letterArray['f'] = 0; 
    letterArray['g'] = 0; 
    letterArray['h'] = 0; 
    letterArray['i'] = 0; 
    letterArray['j'] = 0; 
    letterArray['k'] = 0; 
    letterArray['l'] = 0; 
    letterArray['m'] = 0; 
    letterArray['n'] = 0; 
    letterArray['o'] = 0; 
    letterArray['p'] = 0; 
    letterArray['q'] = 0; 
    letterArray['r'] = 0; 
    letterArray['s'] = 0; 
    letterArray['t'] = 0; 
    letterArray['u'] = 0; 
    letterArray['v'] = 0; 
    letterArray['w'] = 0; 
    letterArray['x'] = 0; 
    letterArray['y'] = 0; 
    letterArray['z'] = 0; 
    for(var letter of string) { 
     letterArray[letter] = letterArray[letter] + 1; 
    } 
    letterArray.forEach(function(value, index, thearay) { 
     if (value == 1) { 
     console.log(index); 
     } 
    }); 
} 
var tester = "abacabad"; 
firstNotRepeatingCharacter(tester); 
+0

werden können Schlüssel für Arrays genannt haben. – Nick

+0

Ich denke du meinst 'var Buchstabe in string' anstatt' of'. – Shadow

+0

Sie versuchen, mit Array wie ein Objekt zu arbeiten –

Antwort

2

Die minimalen Änderungen am Code erforderlich sind wie folgt (siehe die Kommentare // ****** im Code)

function firstNotRepeatingCharacter(string) { 
 
    // *********** change to Object 
 
    var letterArray = {}; 
 
    letterArray['a'] = 0; 
 
    letterArray['b'] = 0; 
 
    letterArray['c'] = 0; 
 
    letterArray['d'] = 0; 
 
    letterArray['e'] = 0; 
 
    letterArray['f'] = 0; 
 
    letterArray['g'] = 0; 
 
    letterArray['h'] = 0; 
 
    letterArray['i'] = 0; 
 
    letterArray['j'] = 0; 
 
    letterArray['k'] = 0; 
 
    letterArray['l'] = 0; 
 
    letterArray['m'] = 0; 
 
    letterArray['n'] = 0; 
 
    letterArray['o'] = 0; 
 
    letterArray['p'] = 0; 
 
    letterArray['q'] = 0; 
 
    letterArray['r'] = 0; 
 
    letterArray['s'] = 0; 
 
    letterArray['t'] = 0; 
 
    letterArray['u'] = 0; 
 
    letterArray['v'] = 0; 
 
    letterArray['w'] = 0; 
 
    letterArray['x'] = 0; 
 
    letterArray['y'] = 0; 
 
    letterArray['z'] = 0; 
 
    for(var letter of string) { 
 
     letterArray[letter] = letterArray[letter] + 1; 
 
    } 
 
    // *********** an object has no forEach, 
 
    //    so, we now need to iterate through the keys 
 
    //    (a,b,c ...) of the object, 
 
    //    that's where Object.keys helps 
 
    Object.keys(letterArray).forEach(function(key, index, thearay) { 
 
     var value = letterArray[key]; //the value is letterArray[key] 
 
     if (value == 1) { 
 
      console.log(key); 
 
     } 
 
    }); 
 
} 
 
var tester = "abacabad"; 
 
firstNotRepeatingCharacter(tester);

jedoch im Namen der Funktion suchen, ich würde erwarten

firstNotRepeatingCharacter("abacabad"); // c 
firstNotRepeatingCharacter("abadacad"); // d 

Wenn ja, würde der Code wesentlich einfacher

function firstNotRepeatingCharacter(string) { 
 
    for (let i = 0; i < string.length; i++) { 
 
     if (string.split(string[i]).length == 2) { 
 
      return string[i]; 
 
     } 
 
    } 
 
    return null; 
 
} 
 
console.log(firstNotRepeatingCharacter("abacadab")); 
 
console.log(firstNotRepeatingCharacter("abadacab"));

Verwandte Themen