2016-05-17 143 views
1

該函數令我困惑,它運行時如果我刪除返回空對象。並且在那裏的迴歸聲明忽略它並且做同樣的事情。 不知道這裏發生了什麼,顯然沒有其他回報聲明。函數在返回語句之前返回空對象

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

你如何引用它?你如何檢查它返回的結果?順便說一句,你不需要嵌套循環。 – zerkms

+0

使用茉莉花來測試。例如 它('將空詞評分爲零',函數(){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/