Я пытаюсь написать функцию, которая найдет индекс наибольшего числа в массиве, но моя текущая функция нарушена наличием отрицательных чисел в массиве. Вот код, который у меня есть.
export let maxIndex = (a: number[]): number => {
let biggest = -9000000000; // use to keep track of largest element
if (a.length === 0) {
return -1;
} else {
for (let i = 0; i < a.length; i++) {
if (a[i] > biggest) {
biggest = a[i];
}
}
}
return a[biggest];
};
Ваше return a[biggest];
возвращает число в индексе наибольшего найденного элемента (например, [0, 2, 4, 6]
вернет a[6]
который разрешает undefined
, что не имеет смысла для того, что вы пытаетесь выполнить),
Вам нужно отслеживать не только самое большое количество найденных до сих пор, но и индекс этого последнего найденного наибольшего числа. Кроме того, если вы инициализировать индексную переменную в -1
, то нет необходимости в начальной, if
тест:
const maxIndex = (a) => {
let biggestNum = -Infinity; // use to keep track of largest element
let biggestIndex = -1;
for (let i = 0; i < a.length; i++) {
if (a[i] > biggestNum) {
biggestNum = a[i];
biggestIndex = i;
}
}
return biggestIndex;
};
console.log(maxIndex([0, -1, -2]));
console.log(maxIndex([]));
console.log(maxIndex([30, 50, 40]));
Другой метод заключается в распространении в Math.max
:
const maxIndex = (a) => {
const max = Math.max(...a);
return a.indexOf(max);
};
console.log(maxIndex([0, -1, -2]));
console.log(maxIndex([]));
console.log(maxIndex([30, 50, 40]));