Я создаю API фильмов, используя Node и Express. Моя функция фильтрации не вернула значение, ниже мой код:
class MovieStore{
constructor(){
this.movieData = require('./db/database.json');
}
all(){
return this.movieData;
}
findMovie(tittle){
return this.movieData.filter(movie => movie.Tittle === tittle);
}
}
Есть ли проблема с функцией фильтра? Он возвращает только [], даже если я передал значение params из URL.
Это мой json:
[
{
"Title":"Guardians of the Galaxy Vol. 2",
"Year":"2017",
"Rated":"PG-13",
"Released":"05 May 2017",
"Runtime":"136 min",
"Genre":"Action, Adventure, Comedy",
"Director":"James Gunn",
"Writer":"James Gunn"
}
]
Если это опечатка, можно ожидать, что все movie.Tittle будут undefined, и поэтому фильтр вернет пустой массив, если только аргумент для findMovie не является также undefined.
Можете ли вы добавить немного данных из json
это мой файл json: [{"Название": "Стражи Галактики, том 2", "Год": "2017", "Оценка": "PG-13", "Выпущено": "05 мая 2017 г.", «Время выполнения»: «136 минут», «Жанр»: «Боевик, Приключения, комедия», «Режиссер»: «Джеймс Ганн», «Сценарист»: «Джеймс Ганн, Дэн Абнетт (по мотивам комиксов Marvel), Энди }]
Вы можете мне объяснить, что это за опечатка? как я могу это проверить?
@ Lee0ne Опечатка - это когда вы хотели напечатать одно, а набрали другое. Например, ваш объект содержит свойство Title, но вместо этого вы набрали Tittle.
@ Кевин, я думаю, ты прав. Я проверил, что заголовок вернулся undefine. Как я могу исправить эту ошибку? Есть предложения? :)
Я нашел свою ошибку. Спасибо за помощь :)



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


My filter function did not return the value ... It returns only []
Ваш код фильтра работает нормально, просто нужно исправить небольшую опечатку (выделено в комментарии ниже):
/* define our test database */
const inMemoryDatabase = [
{
"Title":"Guardians of the Galaxy Vol. 2",
"Year":"2017",
"Rated":"PG-13",
"Released":"05 May 2017",
"Runtime":"136 min",
"Genre":"Action, Adventure, Comedy",
"Director":"James Gunn",
"Writer":"James Gunn"
},
{
"Title":"Pacific Rim",
"Year":"2013",
"Director":"Guillermo del Toro",
"Writer":"Travis Beacham"
}
]
/* define your class */
class MovieStore{
constructor(){
this.movieData = inMemoryDatabase
}
all(){
return this.movieData;
}
findMovie(tittle){
return this.movieData.filter(movie => movie.Title === tittle); // <- just fixed your typo here; the json database was using key "Title".
}
}
/* create instance of your MovieStore class */
const concreteMovieStore = new MovieStore()
console.info("ALL MOVIES IN STORAGE:\n", concreteMovieStore.all())
/* test filter function */
const movie = concreteMovieStore.findMovie("Guardians of the Galaxy Vol. 2")
console.info("SEARCH RESULT: ", movie)Надеюсь это поможет. Ваше здоровье!
//in .db/database.json
module.exports = [{
"Title":"Guardians of the Galaxy Vol. 2",
"Year":"2017",
"Rated":"PG-13",
"Released":"05 May 2017",
"Runtime":"136 min",
"Genre":"Action, Adventure, Comedy",
"Director":"James Gunn",
"Writer":"James Gunn"
}];
const movieData = require('./db/database.json');;
class MovieStore{
constructor(){}
all(){
return movieData;
}
findMovie(tittle){
return movieData.filter(movie => movie.Tittle.toLowerCase() === tittle.trim().toLowerCase());
}
}
Попробуйте приведенный выше код, это решит вашу проблему.
хм ... это опечатка?
movie.Tittle?