我有一个数组$array = [5,10,15,20,25];
和一个值。
我们说我的价值是23
,然后我想抓住25
,因为25
是下一个更高的价值。
我已经尝试过PHP
public static function findHigherValue($val,$arr){
foreach ($arr as $key => $value) {
if( $value <= $val){
$higher = $value;
}
}
return $higher;
}
答案 0 :(得分:1)
如果这是javascript,则以下脚本应该可以解决您的问题:
var $result = $array.reduce(function(a,b) { return a >= $value && a-$value < b-$value : a : b }, Infinity);
答案 1 :(得分:1)
我相当自信其中一种较新的阵列方法会更快地完成此操作,但我会循环使用
function getClosestIndex(arr, value){
var smallestDelta = Infinity;
var index;
for(var i = 0; i < arr.length; i++){
//subtract the array value from the give value
var delta = Math.abs(arr[i] - value);
if(delta < smallestDelta){
smallestDelta = delta;
index = i;
}
}
return index;
}
var output = getClosestIndex($array, 13);
$array[output]; //should return the closest value
编辑:我发现问题已经改变了。看起来你想要数组中最接近的值。我为此编辑了上面的代码。
答案 2 :(得分:1)
如果这是一个javascript问题,并且您知道该数组已排序:
var currentValue = 13;
array.find(function (value) {
return value >= currentValue;
})
IE中不支持 find
(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find)
答案 3 :(得分:1)
试试这个:
var array = [5,10,15,20,25,30,35,40];
var input = 10;
var value = array.filter(function(item) {
return item > input;
}).sort()[0];
document.getElementById('output').innerHTML = value;
<div id="output"></div>
答案 4 :(得分:1)
此解决方案从模式数组中提供相同或更高的值。它仅适用于排序数组。
var pattern = [5, 10, 15, 20, 25, 30, 35, 40],
given = [1, 13, 27, 39],
i = 0,
result = given.map(function (a) {
while (pattern[i] < a) {
i++;
}
return pattern[i];
});
document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');
答案 5 :(得分:1)
使用Array.sort()函数可能会因Unicode而产生意外结果 - 请参阅here
使用for循环遍历数组并使用简单的比较器来反对以前的值是不是一个好主意?
$array = [5,10,45,15,20,25,30,35,40];
var num = $array[0]; // Your first comparitor
var highest;
for (i=0; i<$array.length; i++) {
console.log(highest);
if($array[i] > num) {
num = $array[i];
highest = $array[i];
}
}
我希望这会有所帮助。
Rolos
答案 6 :(得分:1)
使用PHP的另一个选项,使用array_filter
从$value
中删除较低的值,然后获取最小值。
$value = 25;
$array = array_filter($array, function ($x) use ($value) { return $x > $value; })
echo min($array);
答案 7 :(得分:1)
返回高于或等于搜索值的最接近数字:
function findClosest(arr, val){
return arr.reduce(function(acc, el){
if(el >= val){
if(acc === null) return el;
var d1 = el - val,
d2 = Math.abs(acc - val);
return d1 < d2 ? el : acc;
} else {
return acc;
}
}, null);
}
console.log(findClosest([5,16,20,20,25,10,5,30], 16));
分类,未分类,重复值等不应影响结果。
修改:我认为0
不是没有匹配时返回的最佳值。所以我稍微重写了一下。如果未找到匹配项,则会返回null
。