2016-05-17 9 views
1

この関数は私を混乱させ、空のオブジェクトを返すリターンを削除すると実行されます。そこでのリターン・ステートメントでは、それを無視して同じことを行います。 ここで何が起こっているのか分かりませんが、明らかに他の返信文はありません。関数はreturn文の前に空のオブジェクトを返します

var score = function(string){ 
    var sum = 0; 
    if(string.length > 0){ 
     string = string.toLowerCase(); 
     var array = string.split(''); 
     for(var i = 0; i < array.length; i++){ 
      for(var letter in letters){ 
       if(array[i] === letter) { 
        sum += letters[array[i]]; 
       } 
      } 
     } 
    } 
    return sum; 
}; 

これはテストするためにジャスミンを使用して

var letters = { 
    a : 1, e : 1, i : 1, o : 1, u : 1, l : 1, n : 1, r : 1, s : 1, t : 1, d : 2, g : 2, b : 3, c : 3, m : 3, p : 3, f : 4, h : 4, v : 4, w : 4, y : 4, k : 5, j : 8, x : 8, q : 10, z : 10 
} 

関連だという文字列ではありません。たとえば、

it('scores an empty word as zero',function() { expect(new score('')).toEqual(0); }); 
+1

あなたのコードは私のために働いています。あなたはどのように機能スコアを呼んでいますか?私にとっては、 'score( 'hello')'は8を返します。 – Schiem

+0

どのように呼び出すのですか?それが返す結果をどのようにチェックしますか? Btw、ネストされたループは必要ありません。 – zerkms

+0

ジャスミンを使用してテストします。 (0); それは '空の単語をゼロとしてスコアする'、function(){ expect(新しいスコア( ''))toEqual(0); }); –

答えて

0

これは、単純な未定義のチェックだけで動作するようです。 'testz'は14に警告する必要がありますか?

var letters = { 
    a : 1, e : 1, i : 1, o : 1, u : 1, l : 1, n : 1, r : 1, s : 1, t : 1, d : 2, g : 2, b : 3, c : 3, m : 3, p : 3, f : 4, h : 4, v : 4, w : 4, y : 4, k : 5, j : 8, x : 8, q : 10, z : 10 
}; 

var score = function(string){ 
    var sum = 0; 
    if(typeof string !== 'undefined' && string.length > 0){ 
     string = string.toLowerCase(); 
     var array = string.split(''); 
     for(var i = 0; i < array.length; i++){ 
      for(var letter in letters){ 
       if(array[i] === letter) { 
        sum += letters[array[i]]; 
       } 
      } 
     } 
    } 
    return sum; 
}; 


alert(score('testz')); 

https://jsfiddle.net/c7eq8g46/

関連する問題