我的问题是我有一个带数字的数组,我希望获得低于例如数字的最高数字。 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的方法。
答案 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.max
与Array.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