我有一个很长的if语句,在这里我检查各种可能性的组合。这是我当前拥有的代码:
for (let i = 0; i < movies.length; i++) {
if (taste[0] == movies[i].genres[0].name ||
taste[0] == movies[i].genres[1].name ||
taste[0] == movies[i].genres[2].name ||
taste[1] == movies[i].genres[0].name ||
taste[1] == movies[i].genres[1].name ||
taste[1] == movies[i].genres[2].name ||
taste[2] == movies[i].genres[0].name ||
taste[2] == movies[i].genres[1].name ||
taste[2] == movies[i].genres[2].name
) {
moviesForUser.push(movies[i].original_title);
}
}
我的问题:有些电影的流派不同。这意味着在某些情况下,我会遇到异常的异常。考虑到阵列长度,如何检查所有可能的组合选项?
moviesForUser = movies.filter(movie => movie.genres.some(genre => taste.includes(genre.name)))
.map(movie => movie.original_title);
这将完全替换您的循环。
更具可读性的版本:
let moviesForUser = [];
for (let i = 0; i < movies.length; i++) {
let genreFound = false;
for (let j = 0; j < movies[i].genres.length; j++) {
if (taste.includes(movies[i].genres[j].name)) {
genreFound = true;
break;
}
}
if (genreFound) {
moviesForUser.push(movies[i].original_title);
}
}
较短的版本:
let moviesForUser = movies.reduce((result, movie) => {
if (movie.genres.some(genre => taste.includes(genre.name))) {
result.push(movie.original_title);
}
return result;
}, []);