Как работает этот функциональный пример Javascript? - PullRequest
0 голосов
/ 22 января 2019

Кажется, я просто не могу обернуть голову вокруг этого фрагмента кода.Не могли бы вы дать мне подсказку или два на это?

  var filteredList = watchList.map(function(e) {
  return {title: e["Title"], rating: e["imdbRating"]}
  }).filter((e) => e.rating >= 8);

Вопрос: я понимаю, что 'e' - это параметр, передаваемый обратному вызову метода карты, но что такое e ["Title"] и e ["imdbRating"]?Ожидается, что мы запустим эту функцию на массиве объектов.Я не понимаю синтаксис, и как это может даже вызвать что-то.* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}

* * * * * * * * * * * * * * * * * * * * * * * * *} * * * * * * * * * * * * * * * * * * * *} * * * * * * * * * * * * * '' 100 ”.

Ответы [ 4 ]

0 голосов
/ 22 января 2019

Давайте разберем его так, чтобы оно имело больше смысла

Сначала мы создадим новый массив с картой.Карта работает путем перебора массива (в данном случае watchList), на каждой итерации она передает текущий элемент массива в предоставленную функцию обратного вызова, возвращаемое значение определяет это значение по индексу i в новом массиве, где индекс i - это позиция переданного элемента.к функции обратного вызова.

Возьмем, к примеру:

const timeTwo = [1, 2, 3].map(num => num * 2);
// timesTwo = [2, 4, 6]

В приведенном вами примере map возвращает новый массив объектов, содержащий заголовок и рейтинг свойств.title остается тем же из исходного массива, но рейтинг является отображенным значением e.imdbRating.

var filteredList = watchList.map(function(e){
  return {
    title: e.title,
    rating: e.imdbRating,
  };
});

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

В этом случаеокончательное значение отфильтрованного списка будет массивом объектов со свойствами title и rating, где рейтинг больше или равен 8;

  var filteredList = filteredList.filter((e) => e.rating >= 8);

Давайте сложим все вместе, watchList.map возвращает новый массив, и у всех массивов есть метод фильтра, поэтому мы можем отфильтровать фильтр по карте (как показано ниже).И наконец, фильтр возвращает массив, который будет храниться в переменной filterList.

  var filteredList = watchList.map(function(e) {
      return {title: e.Title, rating: e.imdbRating}
  }).filter((e) => e.rating >= 8);
0 голосов
/ 22 января 2019

Здесь e указывает на текущий элемент, обрабатываемый в массиве.Таким образом, e будет в основном представлять каждый объект внутри массива.Вы можете заменить e на любое другое допустимое имя.

В вашем коде сначала map создает новый массив объектов, и у каждого объекта есть два ключа title & imbRating, а затем снова применяет фильтр к нему, чтобы создать еще один новый массив, в котором значение imbRating больше 8

var watchList = [{
    "Title": "Inception",
    "Year": "2010",
    "Rated": "PG-13",
    "Released": "16 Jul 2010",
    "Runtime": "148 min",
    "Genre": "Action, Adventure, Crime",
    "Director": "Christopher Nolan",
    "Writer": "Christopher Nolan",
    "Actors": "Leonardo DiCaprio, Joseph Gordon-Levitt, Ellen Page, Tom Hardy",
    "Plot": "A thief, who steals corporate secrets through use of dream-sharing technology, is given the inverse task of planting an idea into the mind of a CEO.",
    "Language": "English, Japanese, French",
    "Country": "USA, UK",
    "Awards": "Won 4 Oscars. Another 143 wins & 198 nominations.",
    "Poster": "http://ia.media-imdb.com/images/M/MV5BMjAxMzY3NjcxNF5BMl5BanBnXkFtZTcwNTI5OTM0Mw@@._V1_SX300.jpg",
    "Metascore": "74",
    "imdbRating": "8.8",
    "imdbVotes": "1,446,708",
    "imdbID": "tt1375666",
    "Type": "movie",
    "Response": "True"
  },
  {
    "Title": "Interstellar",
    "Year": "2014",
    "Rated": "PG-13",
    "Released": "07 Nov 2014",
    "Runtime": "169 min",
    "Genre": "Adventure, Drama, Sci-Fi",
    "Director": "Christopher Nolan",
    "Writer": "Jonathan Nolan, Christopher Nolan",
    "Actors": "Ellen Burstyn, Matthew McConaughey, Mackenzie Foy, John Lithgow",
    "Plot": "A team of explorers travel through a wormhole in space in an attempt to ensure humanity's survival.",
    "Language": "English",
    "Country": "USA, UK",
    "Awards": "Won 1 Oscar. Another 39 wins & 132 nominations.",
    "Poster": "http://ia.media-imdb.com/images/M/MV5BMjIxNTU4MzY4MF5BMl5BanBnXkFtZTgwMzM4ODI3MjE@._V1_SX300.jpg",
    "Metascore": "74",
    "imdbRating": "8.6",
    "imdbVotes": "910,366",
    "imdbID": "tt0816692",
    "Type": "movie",
    "Response": "True"
  }
]



var filteredList = watchList.map(function(e) {
  return {
    title: e["Title"],
    rating: e["imdbRating"]
  }
}).filter((e) => e.rating >= 8);

console.log(filteredList)
0 голосов
/ 22 января 2019
var filteredList = watchList.map(function(e) {
  return {title: e["Title"], rating: e["imdbRating"]}
  }).filter((e) => e.rating >= 8);

В приведенном выше коде функция map используется для итерации всех элементов массива watchList.Карта повторяет все значения одно за другим, которые являются объектами.е назначен объект.Возвращает объект со свойством и его значением как e["Title"].Это способ доступа к свойствам объекта. e["Title"] и e.imdbRating будут соответственно вызывать значения, связанные со значениями title и imdbRating.

0 голосов
/ 22 января 2019

e - объект с некоторыми свойствами. Представьте, что это выглядит так:

var e = {
    Title: 'foo',
    imdbRating: 7.2,
};

поэтому e ["Title"] вернет 'foo', а e ["imdbRating"] вернет 7.2.

Функция, которую вы опубликовали, также может быть написана так:

  var filteredList = watchList.map(function(e) {
      return {title: e.Title, rating: e.imdbRating}
  }).filter((e) => e.rating >= 8);

Может быть, это облегчает понимание.

...