我希望字符串输入中最接近0的数字由以''分隔的数字组成。我已经按照以下方式编写了它,它已经在第一行temps
变量上工作但在第二行temps
变量中没有正确运行。这里缺少什么?
<script type="text/javascript">
//var temps = "9 -2 -8 4 5"; // get 2 & correct
var temps = "-12 -5 -137"; // get -12 & not correct ,expected 5
var temp = temps.split(" ");
var closest = parseInt(temp[0]);
for(var i = 0;i < temp.length ;i++){
var t = Math.abs(temp[i]);
console.log(typeof closest) ; //number : same type
if(closest > t) {
closest = t;
}
}
console.log(closest);
</script>
答案 0 :(得分:1)
您正在
中存储-12最接近的变量
在比较你这样做时
-12>5
这是假的,所以你的作业
closest =t;
未执行。它适用于第一个输入,因为存储了9作为最接近的变量。您可以做的是将绝对值存储为此步骤中最接近的变量。
var closest = parseInt(Math.abs(temp[0]));
答案 1 :(得分:1)
只需更改行
即可var closest = parseInt(temp[0]);
通过
var closest = Math.abs(parseInt(temp[0]));
你错过了第一个索引的绝对值。
答案 2 :(得分:0)
您可以拥有自定义排序功能,然后选择1值
function getClosestToZero(str) {
return str.split(" ").sort(function(a, b) {
var a1 = Math.abs(a);
var b1 = Math.abs(b);
return a1 > b1 ? 1 : a1 < b1 ? -1 : 0
})[0];
}
var temps = "-12 -5 -137 0 2";
console.log(getClosestToZero(temps))
temps = "11 2 4 5 9 10";
console.log(getClosestToZero(temps))
temps = "-11 -2 -9 3 23";
console.log(getClosestToZero(temps))