@lil_web

Как решить задачку, сохранив предыдущий элемент массива в замыкании?

Я на собеседовании решил задачку:
/**
 * @param {Array<number>} array
 * @return {Array<number>}
 */
const getSumNestElem = (array) => {
  const result = [];

  array.forEach((item, i) => {
    const newValue = (array[i - 1] || 0) + (array[i + 1] || 0);

    result.push(newValue);
  });

  return result;
};

const array = [0, 1, 2, 3, 4];
const result = getSumNestElem(array);
console.log(result); // [1, 2, 4, 6, 3]

Затем интервьюер усложнил задание: попросил отформатировать текущий массив:
/**
 * @param {Array<number>} array
 * @return {void}
 */
const formatSumNestElem = (array) => {
  // make each item is equal to: array[i - 1] + array[i + 1]
};

const array = [0, 1, 2, 3, 4];
formatSumNestElem(array);
console.log(array); // [1, 2, 4, 6, 3]

Я безуспешно поигрался с замыканием:
const formatSumNestElem = (array) => {
  for (let i = 0; i < array.length; i++) {
    const item = array[i];

    (() => {
      const newValue = (array[i - 1] || 0) + (array[i + 1] || 0);

      array[i] = newValue;
    })();
  }
};

Подскажите, пожалуйста, как хорошо решить эту задачку: отформатировать массив заданным способом.
  • Вопрос задан
  • 112 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Не надо никуда ничего сохранять:

arr.splice(0, arr.length, ...arr.map((n, i, a) => (a[i - 1] ?? 0) + (a[i + 1] ?? 0)))
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы