0

以下のコードはarguments.sort、関数ではありませんというエラーを返します。引数オブジェクトを直接変更できないためですか?それとも別のものですか?

どんな助けでも大歓迎です。

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

機能は次のassertとおりです(念のため)

function assert(pass, msg){
   var type = pass ? "PASS" : "FAIL";
   jQuery("#results").append("<li class='" + type + "'><b>" + type + "</b> " + msg + "</li>");
}
4

3 に答える 3

4

これを試して:

return [].sort.call(arguments, function(a, b) {
   return b - a;
})

編集: @Esailijaが指摘したように、これは実際の配列を返すのではなくarguments、配列のようなオブジェクトであるオブジェクトを返すだけです。インデックスによるプロパティの反復とアクセスには問題ありませんが、それだけです。

于 2013-03-07T09:40:55.730 に答える
2

argumentsは配列ではなく、sortメソッドがないためです。

このトリックを使用して、配列に変換できます。

function highest()
{ 
    return [].slice.call(arguments).sort(function(a,b){ 
         return b - a; 
    }); 
} 
于 2013-03-07T09:40:25.783 に答える
0

あなたの最高の関数は内部に引数を渡していません

function highest(arguments)
{ 
    return arguments.sort(function(a,b){ 
         return b - a; 
    }); 
} 

配列で動作するはずです

highest([1, 1, 2, 3])[0]
于 2013-03-07T09:47:09.533 に答える