2013-03-27 133 views
1

我有這樣的JavaScript代碼的數組的最大:http://jsfiddle.net/MvWV7/5/JavaScript的:不工作

我想要實現的是,用戶應填寫輸入從1開始的用戶類型1個的下一個值必須是經過2(不是nanother號碼)等等。

我試圖這樣做(如小提琴所示),以填補在數組中輸入值:

var ary = []; 
$(".activity_order").not(self).each(function(t) {ary.push(this.value);}) 

但是當我做

ary.max() 

我得到

Uncaught TypeError: Object ,,,,,,,, has no method 'max' 

在控制檯上當我做ary.max()我得到0如果沒有數字

UPDATE

是我的錯,我是用谷歌控制檯的jsfiddle,我開始查找數組方法裏面。 當我做ary.max()它給出0

+0

可能的重複:http://stackoverflow.com/q/1669190/875127 – 2013-03-27 18:48:51

回答

2

你大概打字[].max到上的jsfiddle域控制檯。注意輸出:

function() { 
    return Math.max.apply(null, this); // 'this' is your array 
} 

這裏的原因是對的jsfiddle域代碼已修改的Array原型以包括max方法。它映射到Math.max方法,並且本身不駐留在Array對象本身或其原型上。

+0

是的,這是問題所在。其實你的回答根據我的問題是正確的:D – JavierQQ23 2013-03-27 19:03:11

0

陣列不具有.max()方法。如果你想創建一個,你將不得不編寫或獲取一個函數來遍歷一個數組,並找到數組中最大的值。

事實證明,你可以使用Math.max()功能來解決這個問題是這樣的:

var m = Math.max.apply(null, ary); 
0

陣列沒有一個max方法。但有Math.max,你可以使用這個。

var m = Math.max.apply(0, ary);

爲什麼你不能把它像Math.max(ary)的原因是,Math.max接受一系列的值,而不是一個數組。使用apply調用,將第二個數組參數轉換爲一系列參數。

+0

'Math.max()'不會將數組作爲參數。它需要一個或多個個人論點。 – jfriend00 2013-03-27 18:51:15

+0

'Math.max'是一個函數,因此它的原型具有'apply'方法,它實際上可以接受一個數組。 @ jfriend00你在技術上錯誤在這裏。我在這個基礎上投了票。 – Sampson 2013-03-27 18:52:11

+0

@JonathanSampson - 更正了答案。但是..我總是有這樣一種印象,即'僅應用'**在函數內決定了'this'的值。 – techfoobar 2013-03-27 18:53:34

0

問題是.max.min不存在。它們不是方法,就像拋出的錯誤所說的那樣。

您將不得不修改數組原型以按照您提供的語法進行操作。

這已經在這裏討論:JavaScript: min & max Array values?

+0

是的,我做了更新謝謝 – JavierQQ23 2013-03-27 18:52:07

0

原生地在數組對象中沒有max()min()方法。在嘗試使用它之前,您應該添加它們。

Array.prototype.min = function() { 
    return this.reduce(function (p, v) { 
    return (p < v ? p : v); 
    }); 
} 

Array.prototype.max = function() { 
    return this.reduce(function (p, v) { 
    return (p > v ? p : v); 
    }); 
} 

這裏是working fork of your's code添加了這種方法。