2012-03-29 52 views
0

在解決這個問題時遇到了一些麻煩。看看其他解決方案之一,但它是針對不同版本的問題。Resig高級Javascript p#43

John Resig Advanced Javascript Question

具體來說,參照舊的問題,因爲Resig的根本不會在這個問題之前的教程中,我想知道是否有不同的解決方案使用「原型」或「切片」。

http://ejohn.org/apps/learn/#43

這裏的問題,目前的案文:

function highest(){ 
    return arguments.sort(function(a,b){ 
    return b - a; 
    }); 
} 
assert(highest(1, 1, 2, 3)[0] == 3, "Get the highest value."); 
assert(highest(3, 1, 2, 3, 4, 5)[1] == 4, "Verify the results."); 

我也有一個小麻煩理解爲什麼「B - 一」的回報。當更改爲b或只是a時,它仍然通過所有測試。

+0

你是指參數集合不是數組的事實嗎?這就是爲什麼你會得到這個錯誤:錯誤對象#沒有方法'排序'。(請參閱這個例子:http://debuggable.com/posts/turning-javascript-s-arguments-object-into-an-array: 4ac50ef8-3bd0-4a2d-8c2e-535ccbdd56cb) – 2012-03-29 11:22:14

+0

默認的排序行爲是詞法分析,即[7,30,200]的數組排序爲[200,30,7]。所以你必須傳入一個比較函數才能得到正確的數字排序。你得到的任何具體錯誤? – 2012-03-29 11:26:22

回答

0

引用您的問題與排序功能。如果您將第一個斷言中的數字順序更改爲:

assert(highest(3, 1, 1, 2)[0] == 3, "Get the highest value."); 

然後執行返回a或返回b將不再工作。他們與當前斷言一起工作,這只是一個巧合。

如果排名高於B A排序函數應大於零返回

  • 更少,如果一個被評爲除B
  • 零,如果它們相等
  • 大於零下

所以ba以降序返回數字。

如果你進入John Resig的教程中接下來的兩頁(#44和#45),你會看到他引入了一個makeArray函數(http://ejohn.org/apps/learn/#45)解決將參數集合轉換爲數組的問題。