Очень простой вопрос: я пытаюсь сравнить значения в массиве, и я полностью зациклен на том, почему моя логика сравнения терпит неудачу. Каким-то образом, в течение моей циклы, 6 оценивается как> 524. Любые идеи относительно того, что я делаю неправильно? Я полностью в тупике. Вот код, и спасибо!
function highAndLow(numbers){
var compArr = numbers.split(" ");
var highNum = compArr[0]
var lowNum = compArr[0];
for (i = 1; i < compArr.length; i++) {
if (compArr[i] > highNum) {
highNum = compArr[i]
console.log(highNum)
}
}
for (i = 1; i < compArr.length; i++) {
if (compArr[i] < lowNum) {
lowNum = compArr[i]
}
}
return highNum + " " + lowNum
}
highAndLow("4 5 29 54 4 0 -214 542 -64 1 -3 6 -6")
Опять же, я не уверен, как, но результат, который я получаю на консоли, - 6 для highNum (неправильный) и -214 для lowNum (что верно). Мне что-то не хватает?
Элементы compArr
являются строками, поэтому их сравнивают лексикографически, а не численно. Вы должны сделать массив чисел:
var compArr = numbers.split(" ").map(Number);
function highAndLow(numbers){
var compArr = numbers.split(" ").map(Number);
var highNum = compArr[0]
var lowNum = compArr[0];
for (i = 1; i < compArr.length; i++) {
if (compArr[i] > highNum) {
highNum = compArr[i]
console.log(highNum)
}
}
for (i = 1; i < compArr.length; i++) {
if (compArr[i] < lowNum) {
lowNum = compArr[i]
}
}
return highNum + " " + lowNum
}
console.log(highAndLow("4 5 29 54 4 0 -214 542 -64 1 -3 6 -6"));
отредактирован, чтобы включить ответ Бармара. Спасибо, Бармар!
Я понял. Мое сравнение бежало к краю массива и пыталось сравнить с неопределенным. Кроме того, из-за того, как я установил вещи, этот метод не будет работать с строками только с двумя значениями. Вот мой новый код:
function highAndLow(numbers){
var compArr = numbers.split(" ").map(Number);
var highNum = compArr[0]
var lowNum = compArr[0];
if (compArr.length === 2) {
if (compArr[1] > highNum) {
highNum = compArr[1]
}
if (compArr[1] < lowNum) {
lowNum = compArr[1]
}
} else {
for (i = 1; i < compArr.length - 2; i++) {
if (compArr[i] > highNum) {
highNum = compArr[i]
}
}
for (i = 1; i < compArr.length - 2; i++) {
if (compArr[i] < lowNum) {
lowNum = compArr[i]
}
}
}
return highNum + " " + lowNum
}
Однако, вероятно, лучший/более чистый способ сделать это.