Es gibt ein Spieleverzeichnis mit Spielelisten, die durch mehrere Filter geleitet werden.
Spiele werden nach Plattform unterteilt (HTC, PSVR, PS5, Favoriten). , Checkbox ?Geeignet für Kinder“ (isChild), Checkbox ?Geeignet für zwei“ (isLocalMultiplayer) und Suche nach Spielen nach Name/Tag/Genre (Abfrage). Alle Parameter sind beliebig kombinierbar.
Vollst?ndigen PS5Games-Code anzeigen:
showPS5Games: state => ( query, genre, isChild, isLocalMultiplayer, selectedSort ) => { if (genre == "все" && isChild && isLocalMultiplayer) { var tmpArray = state.games.filter(game => { return ( (game.category == "ps5" && isChild && game.isLocalMultiplayer && game.title.toLowerCase().includes(query)) || (game.category == "ps5" && isChild && game.isLocalMultiplayer && game.genre.includes(query)) || (game.category == "ps5" && isChild && game.isLocalMultiplayer && game.tag.includes(query)) ); }); } else if (isChild && isLocalMultiplayer) { var tmpArray = state.games.filter(game => { return ( (game.category === "ps5" && isChild && game.isLocalMultiplayer && game.genre === genre && game.title.toLowerCase().includes(query)) || (game.category === "ps5" && isChild && game.isLocalMultiplayer && game.genre === genre && game.genre.includes(query)) || (game.category === "ps5" && isChild && game.isLocalMultiplayer && game.genre === genre && game.tag.includes(query)) ); }); } else if (genre === "все" && isChild) { var tmpArray = state.games.filter(game => { return ( (game.category === "ps5" && game.isChild && game.title.toLowerCase().includes(query)) || (game.category === "ps5" && game.isChild && game.genre.includes(query)) || (game.category === "ps5" && game.isChild && game.tag.includes(query)) ); }); } else if (isChild) { var tmpArray = state.games.filter(game => { return ( (game.category === "ps5" && game.isChild && game.genre === genre && game.title.toLowerCase().includes(query)) || (game.category === "ps5" && game.isChild && game.genre === genre && game.genre.includes(query)) || (game.category === "ps5" && game.isChild && game.genre === genre && game.tag.includes(query)) ); }); } else if (genre === "все" && isLocalMultiplayer) { var tmpArray = state.games.filter(game => { return ( (game.category === "ps5" && game.isLocalMultiplayer && game.title.toLowerCase().includes(query)) || (game.category === "ps5" && game.isLocalMultiplayer && game.genre.includes(query)) || (game.category === "ps5" && game.isLocalMultiplayer && game.tag.includes(query)) ); }); } else if (isLocalMultiplayer) { var tmpArray = state.games.filter(game => { return ( (game.category === "ps5" && game.isLocalMultiplayer && game.genre === genre && game.title.toLowerCase().includes(query)) || (game.category === "ps5" && game.isLocalMultiplayer && game.genre === genre && game.genre.includes(query)) || (game.category === "ps5" && game.isLocalMultiplayer && game.genre === genre && game.tag.includes(query)) ); }); } else if (genre === "все") { var tmpArray = state.games.filter(game => { return ( (game.category === "ps5" && game.title.toLowerCase().includes(query)) || (game.category === "ps5" && game.genre.includes(query)) || (game.category === "ps5" && game.tag.includes(query)) ); }); } else { var tmpArray = state.games.filter(game => { return ( (game.category === "ps5" && game.genre === genre && game.title.toLowerCase().includes(query)) || (game.category === "ps5" && game.genre === genre && game.genre.includes(query)) || (game.category === "ps5" && game.genre === genre && game.tag.includes(query)) ); }); } var filteredGames = []; if (selectedSort == "ascending") { filteredGames = tmpArray.sort((a, b) => a.title.localeCompare(b.title)); } else if (selectedSort == "descending") { filteredGames = tmpArray.sort((a, b) => b.title.localeCompare(a.title)); } else if (selectedSort == "bygenre") { filteredGames = tmpArray.sort((a, b) => a.genre.localeCompare(b.genre)); } else if (selectedSort == "bytag") { filteredGames = tmpArray.sort((a, b) => a.tag.localeCompare(b.tag)); } else { filteredGames = tmpArray; } return filteredGames; }
Ich habe eine Verzweigungsfunktion mit vielen Wenns für jede m?gliche Kombination geschrieben, die nicht optimiert und nicht sch?n war. Au?erdem funktioniert das Filtern des Arrays nach zwei ausgew?hlten Kontrollk?stchen aus irgendeinem Grund nicht, sondern nur eines funktioniert einwandfrei. Wie kann man es am besten umschreiben?
這里有很多重復的邏輯。提高效率的第一步是清理 if 語句。例如你有:
if (genre == "все" && isChild && isLocalMultiplayer) { ... } else if (isChild && isLocalMultiplayer) {
其中一些條件可以使用嵌套 if 檢查一次:
if (isChild && isLocalMultiplayer) { if (genre == "все" { ... } }
此外,出于同樣的原因,還可以簡化退貨。例如這個返回
return ( (game.category == "ps5" && isChild && game.isLocalMultiplayer && game.title.toLowerCase().includes(query)) || (game.category == "ps5" && isChild && game.isLocalMultiplayer && game.genre.includes(query)) || (game.category == "ps5" && isChild && game.isLocalMultiplayer && game.tag.includes(query)) );
可以簡化為:
return ( game.category == "ps5" && isChild && game.isLocalMultiplayer && (game.title.toLowerCase().includes(query) || game.genre.includes(query) || game.tag.includes(query)) );
我希望這能幫助您弄清楚您在這里遇到的其他問題,祝您好運!