2017-10-24 18 views
-1

以下のコードを使用して、シーケンス内の最初の繰り返し文字を見つけようとしています。私がブラウザでコードを実行し、コンソールでletterArray.forEach関数で停止すると、コンソールログエラーはforEachへの入力が未定義であることを示します。しかし、それは私のように思えるでしょう。各自がletterArrayから入力を1つずつ取り出し、それらが等しいかどうかを見て結果を返します。誰もがなぜ私のforEachループの傾きが私のletterArrayからの入力を読み取るかを知っている?次のように必要なあなたのコードに最小限の変更であるForEachに渡される値は、定義されていません。

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

は、配列のキーを命名することはできませんはるかに簡単になります。 – Nick

+0

あなたは 'of'ではなく' string in string'を意味すると思います。 – Shadow

+0

あなたはオブジェクトのように配列を操作しようとしています –

答えて

2

私は、関数の名前を見て、しかし

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

(コメントコードで// ******を参照してください)期待するでしょう

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

その場合、コードは

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

関連する問題