javascript 如何重构为高阶函数?

xdnvmnnf  于 2022-11-27  发布在  Java
关注(0)|答案(2)|浏览(144)

如何将此函数重构为高阶函数?
它将返回一个新数组,该数组包含字符的子数组,这些子数组包含值“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');
nxowjjhe

nxowjjhe1#

解决方案

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' ] } ]
kq4fsx7k

kq4fsx7k2#

你可以咖喱它(返回函数中的函数)

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 "系列有一本关于这个的很棒的书(简短而免费),它解释得非常好You Don't Know JS Yet: Scope & Closures - 2nd Edition

相关问题