if语句中超出界限的异常中的不同数组长度

问题描述 投票:0回答:2

我有一个很长的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);
   }
}

我的问题:有些电影的流派不同。这意味着在某些情况下,我会遇到异常的异常。考虑到阵列长度,如何检查所有可能的组合选项?

javascript arrays node.js json if-statement
2个回答
3
投票
您可以使用更多动态方法来避免像这样对索引进行硬编码:

moviesForUser = movies.filter(movie => movie.genres.some(genre => taste.includes(genre.name))) .map(movie => movie.original_title);

这将完全替换您的循环。

0
投票

更具可读性的版本:

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; }, []);
© www.soinside.com 2019 - 2024. All rights reserved.