1. Выглядите немного громоздко?

Но, к счастью, это не так сложно, как вы можете ожидать.

Array.prototype.reduce()имеет 2 параметра:

  1. Функция обратного вызова
  2. Первоначальный значение

Где сначала (acc, item, idx, arr) => and returning something which have the same type as InitialValue. И InitialValue не требуется, но если вы используете машинописный текст, будет лучше иметь InitialValue (если вы хотите, чтобы InitialValue было равно нулю, используйте as SomeType)

  1. acc* — сумма каждой итерации
  2. item* — элемент текущего массива
  3. idx* — индекс текущего массива
  4. arr* — повторяемый массив

2. ReduceReverseFunc как SimpleExample

Где acc — это сумма, к которой на каждой итерации мы добавляем новый элемент. Например, мы даем [1, 2, 3, 4] в качестве параметра для reduceReverseFunc.

  1. item === 1 , acc === [] (акк равноInitialValue )
  2. item === 2 , acc === [1] (акк равно сумме предыдущей итерации)
  3. item === 3, acc === [2, 1] (акк равно сумме...)
  4. 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(), потому что это потрясающе, как ваша жизнь.

Спасибо за чтение, я так ценю это ♥.

Исходный код (GitHub).