фильтрация данных json по годам

#javascript #json #filter

#javascript #json #Фильтр

Вопрос:

Я хочу отфильтровать записи, которые имеют год с 2000 по 2021 год.

 "Rank": 50,
   "Title": "Casablanca",
   "Description": "A cynical nightclub owner protects an old flame and her husband from Nazis in Morocco.",
   "Runtime": 102,
   "Genre": "Drama",
   "Rating": 8.5,
   "Metascore": "100",
   "Votes": 441864,
   "Gross_Earning_in_Mil": "1.02",
   "Director": "Michael Curtiz",
   "Actor": "Humphrey Bogart",
   "Year": 1942
 

Я попытался использовать метод, который я нашел из другого решения, однако он работает некорректно.

 var startDate = new Date("1990");
var endDate = new Date("2000");

var resultProductData = movies.filter(a => {
  var date = new Date(a.Year);
  return (date >= startDate amp;amp; date <= endDate);
});
 

Комментарии:

1. const result = movies.filter(({year}) => (year > 2000 amp;amp; year < 2021)); year Свойство является целым числом, поэтому вы можете просто проверить его напрямую.

2. Причина, по которой ваш фильтр не работает, заключается в том, что вы создаете даты startDate и endDate из строк, а дату сравнения — из целого числа. Строки считываются как годы, в то время как целое число js интерпретируется как миллисекунды с момента начала эпохи.

Ответ №1:

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

 const result = movies.filter(({year}) => (year >= 2000 amp;amp; year =< 2021)); 
 

Но причина, по которой ваш фильтр не работает, заключается в том, что вы создаете даты startDate и endDate из строк, а дату сравнения — из целого числа. Строки интерпретируются как годы, в то время как js интерпретирует целое число как миллисекунды с момента начала эпохи.

 var startDate = new Date("1990");
// Mon Jan 01 1990 00:00:00 GMT 0000 (GMT)
var endDate = new Date("2000");
// Sat Jan 01 2000 00:00:00 GMT 0000 (GMT)

const a = { "Year": 1942 }
var date = new Date(a.Year);
// Thu Jan 01 1970 00:00:01 GMT 0000 (GMT)
 

Чтобы исправить это, вам нужно будет привести свои movie.year данные к строке.

 var resultProductData = movies.filter(a => {
  var date = new Date(a.Year.toString());
  ...
}
 

Комментарии:

1. Правильно, я добавил код через мобильный, пропустил строковую часть