jQuery - 数组中的最高值 - 但低于x

时间:2014-06-06 16:41:43

标签: php jquery arrays

我的问题是我有一个带数字的数组,我希望获得低于例如数字的最高数字。 6。

所以如果我有这样的数组:

  

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的方法。

3 个答案:

答案 0 :(得分: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;
    }
});

答案 1 :(得分:0)

如果你从PHP获取数据,为什么不返回值而不是数组?

您可以先删除大于X的数组元素:

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

现在剩下一个包含小于或等于x

的元素的数组

现在只需获取最大值:

$max = max($filtered);

答案 2 :(得分:0)

首先,您需要使用.split(/[,\s]+/)将字符串视觉数组转换为实数数组。

然后,您可以将Math.maxArray.prototype.filter一起使用。

像这样:

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

基本上上面的做法是使用.filter()查找小于6的所有数字,然后使用Math.max

从返回的数组中取出最大数字