gpt4 book ai didi

javascript - 如果不存在,则从数组中获取下一个最接近(更高)的值

转载 作者:行者123 更新时间:2023-12-03 02:45:59 27 4
gpt4 key购买 nike

function getClosestValue(standardArray, targetVal) {
standardArray = standardArray.sort(function(a, b){return a-b});
if (!(standardArray) || standardArray.length == 0) {
return null;}
if (standardArray.length == 1){
return standardArray[0];}

for (var i=1; i<standardArray.length; i++) {
if (standardArray[i] > targetVal) {
var prevs = standardArray[i-1];
var currnt = standardArray[i]
return Math.abs( prevs-targetVal ) < Math.abs( currnt-targetVal ) ? prev : currnt;
}
}
return standardArray[standardArray.length-1];
}

var temp = getClosestValue([110,111,188,190,177,120,140,120,149,148,155], 149)
console.log(temp);

我正在修改此代码以从数组中获取下一个最接近的值。如果该值存在于数组中,那么它将返回该值。如果它不存在于数组中,那么它应该返回最接近的较高值。示例:[110, 111, 120, 140, 148, 149, 155, 177, 188, 190] 如果我搜索 150,我应该得到 155 而不是 149。我尝试过,但发现解决这个问题很困难。能否请你帮忙。谢谢已编辑

最佳答案

您将 i 设置为 1 来启动 for 循环,这意味着您要从数组中的第二个元素开始。但是,您的比较 standardArray[i] > targetVal 忽略了 standardArray[i-1] (prevs) 可能小于 0 的事实。

我已经使用新的起始索引和变量名称更新了您的示例:

function getClosestValue(standardArray, targetVal) {
standardArray = standardArray.sort(function(a, b){return a-b});
if (!(standardArray) || standardArray.length == 0) {
return null;}
if (standardArray.length == 1){
return standardArray[0];}

for (var i=0; i<standardArray.length-1; i++) {
if (standardArray[i] >= targetVal) {
var curr = standardArray[i];
var next = standardArray[i+1]
return Math.abs( curr-targetVal ) < Math.abs( next-targetVal ) ? curr : next;
}
}
return standardArray[standardArray.length-1];
}

var temp = getClosestValue([110,111,188,190,177,120,140,120,149,148,155], 149)
console.log(temp);

关于javascript - 如果不存在,则从数组中获取下一个最接近(更高)的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48088721/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com