在这个小小的作业中,你会得到一串空格分隔的数字,并且必须返回最高和最低的数字。
我知道我可以找到这个问题的几十个解决方案和例子,但我有一个案例,我真的无法理解,我想知道原因。
这是代码
highAndLow = numbers => {
var smallestElement = numbers[0];
var highestElement = numbers[0];
numbers = numbers.split(' ');
for (var i = 0; i < numbers.length; i++) {
if (numbers[i] < smallestElement) {
smallestElement = numbers[i];
}
console.log(`${numbers[i]} > ${highestElement}`);
if (numbers[i] > highestElement) {
console.log('----------------------------');
highestElement = numbers[i];
}
}
return `${highestElement} ${smallestElement}`;
};
console.log(highAndLow('4 5 29 54 4 0 -214 542 -64 1 -3 6 12'));
&#13;
考虑到上面的示例,我的结果应为542 -214
,但我得到6 -214
。
当条件为真时,我将两个console.log
打印-----------------
,但是当我查看输出时
if(6 > 542)
如何返回true
?
答案 0 :(得分:1)
您获得6
作为最高值的原因是因为当您执行if (numbers[i] > highestElement)
时,它正在比较字符串而不是数字,而字符串6
中的字符串大于54
因为它逐字符地比较。所以将if (numbers[i] > highestElement)
更改为if (+numbers[i] > +highestElement)
(+将字符串转换为数字)
highAndLow = numbers => {
var smallestElement = numbers[0];
var highestElement = numbers[0];
numbers = numbers.split(' ');
for (var i = 0; i < numbers.length; i++) {
if (+numbers[i] < +smallestElement) {
smallestElement = numbers[i];
}
console.log(`${numbers[i]} > ${highestElement}`);
if (+numbers[i] > +highestElement) {
console.log('----------------------------');
highestElement = numbers[i];
}
}
return `${highestElement} ${smallestElement}`;
};
console.log(highAndLow('4 5 29 54 4 0 -214 542 -64 1 -3 6 12'));
答案 1 :(得分:0)
您正在比较string.Instead您可以将字符串拆分为数组并使用map函数将每个元素转换为整数。然后使用sort
来排列数组,然后使用Math.max/min
来获取值
highAndLow = function(x) {
// split the string & map function to convert each element to number
var newArray = x.split(' ').map(function(item) {
return Number(item)
})
return {
max: Math.max(...newArray),
min: Math.min(...newArray),
}
};
console.log(highAndLow('4 5 29 54 4 0 -214 542 -64 1 -3 6 12'));