Непонятное поведение обратного вызова JavaScript - PullRequest
0 голосов
/ 29 июня 2018

Возникли проблемы при написании функции обратного вызова в JavaScript, которая возвращает сопоставленный массив, в котором каждое число увеличивается на единицу.

arr = [1, 2, 3, 4];

    const each = (elements, cb) => {
      for (let i = 0; i < elements.length; i++) {
        cb(elements[i], i);
      }
    };
    
    const map = (elements, cb) => {
      const mappedArr = [];
      each(elements, item => {
        mappedArr.push(cb(item));
      });
      return mappedArr;
    };



    const cb = (e) => {
      e += 1;
    }


    const newArr = map(arr, cb);
    console.log(newArr) // [ undefined, undefined, undefined, undefined ]

Ваше терпение ценится заранее; Я все еще учусь и пытаюсь понять обратные вызовы. Пожалуйста, помогите мне понять, что я здесь не так сделал.

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

возврат отсутствует в функции cb. Проверьте это:

arr = [1, 2, 3, 4];

const each = (elements, cb) => {
  for (let i = 0; i < elements.length; i++) {
    cb(elements[i], i);
  }
};

const map = (elements, cb) => {
  const mappedArr = [];
  each(elements, item => {
    mappedArr.push(cb(item));
  });
  return mappedArr;
};



const cb = (e) => {
  return e += 1;
}


const newArr = map(arr, cb);
console.log(newArr) // [ undefined, undefined, undefined, undefined ]
0 голосов
/ 29 июня 2018

Ваш cb в данный момент ничего не возвращает, поэтому по умолчанию возвращается undefined. Вместо этого используйте функцию стрелки с неявным возвратом (без { } с), чтобы возвращаемое значение возвращалось.

Кроме того, старайтесь избегать неявного создания глобальных переменных (с вашим arr):

const arr = [1, 2, 3, 4];

const each = (elements, cb) => {
  for (let i = 0; i < elements.length; i++) {
    cb(elements[i], i);
  }
};

const map = (elements, cb) => {
  const mappedArr = [];
  each(elements, item => {
    mappedArr.push(cb(item));
  });
  return mappedArr;
};

const cb = e => e + 1;

const newArr = map(arr, cb);
console.log(newArr)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...