[英]JS TS how to refactor repetitive code into a higher order function with multiple param types
[英]How to refactor to a higher order function?
如何將這個function重構為更高階的function?
它旨在返回一個新數組,其中包含包含值“Rambo”的字符子數組。
function isRamboCharacter(characters) {
const x = [];
for (let i = 0; i < characters.length; i++) {
if (characters[i].movie.includes('Rambo')) {
x.push(characters[i]);
}
}
return x;
}
我試過了:
return characters.movie.includes('Rambo');
解決方案
const characters = [ { movie: ["Rambo", "Rockey", "Avengers"] }, { movie: ["Fatherhood", "Rockey", "Avengers"] } ] const isRamboCharacter = (characters) => characters.filter((char) => char.movie.includes("Rambo")) console.log(isRamboCharacter(characters));
或者直接調用 Array 的 filter 方法
console.log(characters.filter((char) => char.movie.includes("Rambo")));
//output - [ { movie: [ 'Rambo', 'Rockey', 'Avengers' ] } ]
你可以咖喱它(在函數中返回 function)
function isCharacterInMovie(movie) {
return function filterFunction(characters) {
const x = [];
for (let i = 0; i < characters.length; i++) {
if (characters[i].movie.includes(movie)) {
x.push(characters[i]);
}
}
return x;
}
}
const isRamboInMovie = isCharacterInMovie('rambo') // returns the inner function which holds on to the value from when you called it
isRamboInMovie(charactersInTheMatrix); // []
isRamboInMovie(charactersInRambo); // ['rambo']
“你不了解 JS”系列叢書有一本關於此的好書(簡短且免費),它解釋得非常好你還不了解 JS:Scope & Closures - 第 2 版
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.