Как я могу вернуть последний элемент в объекте Array - PullRequest
0 голосов
/ 27 февраля 2019

Я пытаюсь изучить функции обратного вызова, просто создав функцию, которая принимает два числа и имеет обратный вызов, который возвращает последний элемент в моем массиве.Я веб-разработчик-самоучка, поэтому я хотел бы, чтобы некоторые эксперты обучали меня, если это возможно

Это мой код

const items = ['Pencil', 'Notebook', 'yo-yo', 'Gum'];

function last(arr, cb) {
  // last passes the last item of the array into the callback.
  // console.log(arr.pop())
  return cb(arr[arr.length - 1])
}


last(items, cb)

Моя ошибка: Uncaught TypeError: cb не является функцией

Ответы [ 3 ]

0 голосов
/ 27 февраля 2019

Если вы хотите использовать callback cb, то вам нужно его определить.Как это

const items = ['Pencil', 'Notebook', 'yo-yo', 'Gum'];
const cb = x => {
  console.log('last item is:', x);
  return x;
}

function last(arr, cb) {
  return cb(arr[arr.length - 1])
}


last(items, cb);
0 голосов
/ 27 февраля 2019

Обратный вызов - это функция , которая передается другой функции в качестве аргумента и вызывается из нее для продолжения программы.Вам не хватает этой функции обратного вызова в вашем коде.Это простой бит.

Теперь, это предложение из вашего вопроса требует немного больше работы:

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

Это, безусловно, хорошо для случаев, таких как ваш пример, где нет вовлеченных асинхронных процессов ...

const items = ['Pencil', 'Notebook', 'yo-yo', 'Gum'];

function last(arr, cb) {
  const el = arr[arr.length - 1];
  return cb(el);
}

const lastItem = last(items, function print(el) {
  return `Last element is ${el}`;
});

console.log(lastItem);

... но обычно вы увидите, что обратные вызовы в основном используются для продолжения потока кода после запуска асинхронного процесса, и выне может вернуть значения из обратного вызова в этой ситуации.

Например, в этом примере мы используем setTimeout для задержки обратного вызова на 2 с:

const items = ['Pencil', 'Notebook', 'yo-yo', 'Gum'];

function last(arr, cb) {
  const el = arr[arr.length - 1];
  setTimeout(() => {
    cb(el);
  }, 2000);
}

last(items, function print(el) {
  console.log(`Last element is ${el}`);
});

Мы ничего не возвращаем, потому что возвращение setTimeout не имеет смысла, равно как и обратный вызов из в * setTimeout.Вместо этого мы вызываем обратный вызов со значением после 2 с, и строка записывается в консоль.

Это означает, что мы не можем вернуть значение переменной, как мы это сделали с lastItem в первом примере,и причина, по которой «Как я могу вернуть ответ от асинхронного вызова» , вероятно, является наиболее связанным вопросом на этом сайте, и было важно, чтобы вы поняли это для вашего понимания обратных вызовов.

Итак, хотя вы можете возвращать значения из обратных вызовов, они обычно используются для продолжения выполнения программы после асинхронного процесса.

Надеюсь, что это поможет.

0 голосов
/ 27 февраля 2019

Вам необходимо создать обратный вызов.Используйте код ниже:

const items = ['Pencil', 'Notebook', 'yo-yo', 'Gum'];

function last(arr, cb) {
  // last passes the last item of the array into the callback.
  // console.log(arr.pop())
  return cb(arr[arr.length - 1]);
}

last(items, e => { console.log(e) });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...