2013-03-07 142 views
0

下面給出的代碼給出了一個錯誤arguments.sort不是函數。是因爲論點對象不能直接更改?或者是別的什麼。Javascript「not a function」

任何幫助,將不勝感激。

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

試試這個:

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

編輯:作爲@Esailija指出的,這不返回現實數組,它只是返回arguments對象,它是一個類似數組的對象。按索引迭代和訪問屬性很好,但這就是它。

+0

謝謝,這有很大的幫助。 – clu3Less 2013-03-07 09:45:47

+0

但是這不返回一個數組:x – Esailija 2013-03-07 09:47:12

+0

@Esailija:沒錯,沒有注意到它返回一個'arguments'對象。對於這種情況應該沒問題,但是OP可能需要一個實際的數組。 – elclanrs 2013-03-07 09:50:29

2

這是因爲arguments不是數組和不具有sort方法。

您可以使用這一招將其轉換爲一個數組:

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

感謝那些幫助了很多。 – clu3Less 2013-03-07 09:46:03

0

您最高的功能未經過任何論證內

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

,並應與一個陣列工作

highest([1, 1, 2, 3])[0] 
相關問題