0

Всем привет! Просматриваю слайды с курса "JavaScript, часть 1: основы и функции" Курсеры, за вторую неделю, автор: Чистяков Денис, руководитель службы разработки Яндекс. Разбирается функция forEach "под капотом". Пытаюсь выполнить все, как показано на слайдах, в песочнице, но не получается. В чем ошибка?

  let tweet = [  
          { hashtags: ['wstdays'], likes: 16},
          { hashtags: ['html'], likes: 8},
          { hashtags: ['wstdays'], likes: 10},
          { likes: 7}
          ];
    let result = [];
    function forEach(callback){
      for (let i=0; i<this.length; i++) {
        callback(this[i], i);
      };
      function filterWts(tweet, index){
        let hashtags = tweet.hashtags;
        if (Array.isArray(hashtags) && hashtags.indexOf('wstdays') !== -1) {
         result.push(tweet)
        }
      }
    forEach(filterWts)

скрин слайда курса

CrazyElf
  • 71,194
Che
  • 55
  • 5

1 Answers1

1

У вас в функции есть this, значит она предполагает вызов от объекта как метод. В JS forEach - это метод массива, поэтому там this-ом является массив. Поместите свою функцию в прототип массивов или вместо this используйте дополнительный аргумент у функции типа forEach( arr, callback ).

Другими словами, когда вы вызываете forEach(filterWts), вы нигде не указываете, что работу нужно сделать с вашим массивом. В отличие от этого в JS forEach это явно указывается до точки перед forEach.