#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. Правильно, я добавил код через мобильный, пропустил строковую часть