JavaScript: перебрать массив до определенного индекса
Уважаемые, здравствуйте! Есть массив: [ 8, 0, 3, 1, 9, 10, 6, 4, 5, 2 ]
Мне нужно получить: [ 8, 0, 3, 1, 9, 10, 0, 0, 0, 0 ]
После максимального числа, остальные заменить на ноль.
Вот, что есть:
/*
* В заданном массиве найти максимальный элемент. Элементы, стоящие после максимального элемента заменить нулями.
*/
// 1. Создаю масиив [0..10]
const minRange = 0
const maxRange = 10
const arrRangeNumber = []
for (i = minRange; i < maxRange +1; i++) {
arrRangeNumber.push(i)
}
//2. Формирую массив из 10 чисел, выбранных случайным образом из интервала [0, 10].
const arrRandom = arrRangeNumber.sort(() => Math.random() - 0.5)
const setRange = 10
const filterResult = arrRandom.slice(0, setRange)
// 3. Нахожу максимальный элемент
let maxArrNum = filterResult[0]
let maxArrIndex = filterResult[0]
for (i = 0; i < filterResult.length +1; i++) {
if (filterResult[i] > maxArrNum) {
maxArrNum = filterResult[i]
}
}
const totalArr = []
for (i of filterResult) {
//
}
console.log('Исходный массив:', filterResult)
console.log('Максимальное значение:', maxArrNum)
console.log('Индекс максимального числа:', maxArrIndex)
console.log('Результат:', totalArr)
Ответы (2 шт):
Автор решения: Алексей Шиманский
→ Ссылка
let arr = [ 8, 0, 3, 1, 9, 10, 6, 4, 5, 2 ];
let maxNumber = Math.max(...arr);
let maxNumberIndex = arr.findIndex(el => el === maxNumber);
let newArr = [...arr.slice(0, maxNumberIndex), ...Array(arr.length - maxNumberIndex - 1).fill(0)];
console.log(newArr);
Автор решения: Sergey Glazirin
→ Ссылка
Сделал вариант попроще, через два цикла. Сделал еще копирование исходного массива, для того, чтобы не изменять исходный.
const nums = [8, 0, 3, 1, 9, 10, 6, 4, 5, 2];
const changeArray = (arr) => {
const _arr = [...arr];
let maxIndex = 0;
let max = arr[0];
for (let i = 1; i < arr.length; i++) {
if (arr[i] >= max) {
max = arr[i];
maxIndex = i;
}
}
for (let i = maxIndex + 1; i < arr.length; i++) {
_arr[i] = 0;
}
return _arr;
}
console.log(changeArray(nums));