Проблема с функцией, которая принимает (объект или массив, итератор)

1

Я думаю, что мой самый большой вопрос касается параметра "итератор". Я предполагаю, что он принимает функцию. Должен ли я предоставить параметры для этой функции?

// Call iterator(value, key, collection) for each element of collection.
// Accepts both arrays and objects.

_.each = function(collection, iterator) 
{
  if (typeof collection=='object') 
  {
    for(let i=0; i<Object.keys(collection).length; i++) 
    {
      iterator(collection[i],Object.keys(collection)[i],collection);
    }
  }
  else 
  {
    for(let i=0; i<collection.length; i++) 
    {
      iterator(collection[i],i,collection);
    }
  }
};
  • 1
    Привет @elderen, добро пожаловать в Stackoverflow. Пожалуйста, предоставьте нам код и задайте конкретный вопрос, связанный с ним. минимальный воспроизводимый пример
  • 0
    Ваше предположение может быть неверным - итератор официально является объектом, который реализует метод next() . Однако вы, возможно, не говорите о протоколе итерации, как определено в ES6 - у библиотеки вполне может быть свой собственный итератор, который на самом деле является функцией. Или объект, но для него требуются разные методы / подписи. Трудно сказать, не зная точно, о чем вы говорите - пожалуйста, добавьте соответствующую информацию, такую как ссылки, документацию или код, к своему вопросу.
Теги:

1 ответ

0

Оба lodash и подчеркивания относятся к этому в качестве iteratee не итератора. Вероятно, это поможет избежать путаницы с итераторами JavaScript.

Итерируемый - это функция, которая будет вызываться для вас. Вы определили функцию, и each будет вызывать ее для каждого элемента в коллекции. Документация скажет вам, как должна выглядеть подпись функции. Например, underscore будет передаваться (element, index, list) в функцию для каждого элемента. Вам решать написать функцию и решить, что делать с этими параметрами.

Например из Лодаша:

_.forEach([1, 2], function(value) {
    console.log(value);
 });

Итерируемый является анонимной функцией, которая использует только параметр value.

  • 1
    « Вероятно, это поможет избежать путаницы с итераторами javascript». Тем не менее, я всегда находил имя запутанным - итерирование звучит как текущий элемент, над которым вы работаете. В основном for (iteratee of someCollection) . Вместо этого на самом деле это операция (или ее часть), выполняемая над этим элементом - действуя как тело цикла, если хотите. Мне не нравится ни iteratee или iterator для имени здесь. Но у меня также нет предложений для чего-то лучшего - называть вещи - одна из двух трудностей в информатике .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню