

1. Выглядите немного громоздко?
Но, к счастью, это не так сложно, как вы можете ожидать.
Array.prototype.reduce()имеет 2 параметра:
- Функция обратного вызова
- Первоначальный значение
Где сначала (acc, item, idx, arr) => and returning something which have the same type as InitialValue. И InitialValue не требуется, но если вы используете машинописный текст, будет лучше иметь InitialValue (если вы хотите, чтобы InitialValue было равно нулю, используйте as SomeType)
- acc* — сумма каждой итерации
- item* — элемент текущего массива
- idx* — индекс текущего массива
- arr* — повторяемый массив
2. ReduceReverseFunc как SimpleExample
Где acc — это сумма, к которой на каждой итерации мы добавляем новый элемент. Например, мы даем [1, 2, 3, 4] в качестве параметра для reduceReverseFunc.
item === 1 , acc === [](акк равноInitialValue)item === 2 , acc === [1](акк равно сумме предыдущей итерации)item === 3, acc === [2, 1](акк равно сумме...)item === 4, acc === [3, 2, 1](соответствует сумме…)
Таким образом, результат будет [4, 3, 2, 1]
3. ReduceFlatFunc как RecursionExample
- Сначала сделайте защиту от ошибок, проверив
arrс помощью Array.isArray() - А затем, используя Array.prototype.reduce(), мы повторяем arr, и для каждой итерации вызываем
reduceFlatFunc(это называется рекурсия), и если мы этого не делаем есть новый массив, наш защитник вернет текущий обр. - Итак, если вы запустите этот код
reduceFlatFunc([1, [2], [[3]],[[[4]]]), результат будет равен[1, 2, 3, 4]
4. Функция ReduceSortOddNumbersFunc как TrickyExample
Задача: написать функцию, которая принимает в качестве аргументов массив и возвращает новый массив, в котором все нечетные числа отсортированы по возрастанию, а четные остаются на своих местах.
Объяснение
- Во-первых, мы должны написать наш
NumberArrType. - Мы получаем
sortedEvenArrс помощью Array.prototype.filter(), проверяя, является ли число четным, затем с помощью Array.prototype.sort() мы сортируем число Arr. - Примените Array.prototype.reduce() к arr (из параметра функции). Где
InitialValueравно{ arr: [], evenIdx: 0 }, затем установите type{ arr: NumberArrType; evenIdx: number }, используя свойство ts as. - Итак, для каждой итерации мы проверяем
isNumberOdd. - Далее,
if number is odd, evenIdx will be equal to acc.eventIdx(so will be the same as in previous iteration),if not, evenIdx will be equal to acc.evenIdx + 1. - И ту же логику мы применим к итерируемой обр.
- Наконец, с помощью destructuring получаем
arrи даем другое (sortedArr) имя, потому что у нас есть то же самое, которое уже используется. И вернуться, конечно.
Заключение
Не бойтесь использовать Array.prototype.reduce(), потому что это потрясающе, как ваша жизнь.
Спасибо за чтение, я так ценю это ♥.