2014-06-06 24 views
0

我的問題是,我有一個數組的數組,我想獲得最低的數字,比數字低。 6.jQuery - 陣列的最高值 - 但低於x

所以,如果我有一個這樣的陣列:

10,5,19,2,1,32,3

我只想要得到的數5.

我試圖數組從最高到最低是這樣排序:

str = "<?php echo $timings;?>" 
res = str.split(","); 
res.sort(function(a, b){return b-a}); 
alert(res); 

但我從來沒有想出一個辦法得到第一個低於x的值。

+1

數量最多所有號碼是否有可能爲了有重複號碼? – Andrew

+0

你並不真的需要這個jQuery。 Plain JS很好。 – j08691

+0

您是否需要*進行排序,或僅僅是您尋找數字的方法? –

回答

0

首先,您需要使用.split(/[,\s]+/)將查找數組的字符串轉換爲實數列。您可以使用Math.max以及Array.prototype.filter

像這樣:

var res = "<?php echo $timings;?>".split(/[,\s]+/); 
var num = Math.max.apply(null,res.filter(function(x){ 
    return x < 6 
})); 

基本上,上面所做的是查找不到6使用.filter(),然後採取從返回數組使用Math.max

+0

這不適用於當前的情況。這對JS數組有效,但返回的數據是來自PHP的數組。 – GGio

+0

@GGio現在我已經開始工作了 –

+0

你從來不會在'split'中使用'g'。 –

1

你已經證明:

res = "<?php echo $timings;?>" 
res.sort(function(a, b){return b-a}); 

這將是由它獲取的JavaScript時間的字符串。如果什麼瀏覽器看到的是:

res = "10, 5, 19, 2, 1, 32, 3" 
res.sort(function(a, b){return b-a}); 

...那麼第一步是把該字符串到一個數組,你可以這樣做:通過

var a = res.split(/[,\s]+/); 

然後,就循環陣列和外觀:

var lowest; 
a.forEach(function(num) { 
    if (num < 6 && (lowest === undefined || lowest > num)) { 
     lowest = num; 
    } 
}); 

這是使用ES5的forEach,這幾乎所有環境現在(但IE8沒有)。有關如何遍歷數組的詳細信息,請參閱this other Stack Overflow question及其答案。

或者,如果你需要知道指數最低數量的

var a = [10, 5, 19, 2, 1, 32, 3]; 
var lowest, lowestIndex = -1; 
a.forEach(function(num, index) { 
    if (num < 6 && (lowest === undefined || lowest > num)) { 
     lowest = num; 
     lowestIndex = index; 
    } 
}); 
+0

這將工作在JS數組,如果你看問題數組是從PHP返回的,這是行不通的。 – GGio

+0

這個問題真的不清楚。我已經更新了一些,試圖解決這個問題。 –

0

如果是從PHP獲取數據反正爲什麼不返回值,而不是數組?

你可以先刪除是大於X的數組元素:

$filtered = array_filter($timings, function ($x) { return $x < $y; });

現在你只剩下包含有小於或等於x

元素的數組現在剛剛得到最大值:

$max = max($filtered);

+0

我爲什麼要投票下來? OP顯然是從PHP獲取數組,你不能只將JS函數應用於包含PHP數組的變量? – GGio