我不明白这个 javascript 返回语句它使用这个箭头函数

如何解决我不明白这个 javascript 返回语句它使用这个箭头函数

谁能解释一下这个javascript语法。我不明白那个返回语句。 “person”是函数的参数吗?如果“是”,它从哪里经过?此组件中没有 person 变量。至少该 return 语句的详细版本也会有所帮助。以便我能理解

const filterBy = (term) => {
    const searchTermLower = term.toLowerCase()
    return (person) => Object.keys(person).some(prop => 
        person[prop].toLowerCase().indexOf(searchTermLower) !== -1
    )
}
const filterPerson = persons.filter(filterBy(searchTerm))

这里的 presons 是一个对象数组,搜索词是一个字符串。

const persons=[
{ name: 'abc',number: '123456' },{ name: 'def',number: '44233' },{ name: 'xyz',number: '345345' },{ name: 'npe',number: '12312' }]

稍后我使用这个返回的 filterPerson 进行后续处理。代码运行完全正常,但是 这个箭头函数作为回报让我感到困惑。如果需要更多数据,我可以更新问题。

解决方法

称为高阶函数。

您完全可以理解这意味着什么:

let increment = x => x+1;

现在假设你有一个函数,它不是像上面那样返回递增的值,而是返回另一个函数,你会怎么写?简单:

let adder = x => y => y+x;

用法:

let adder = x => y => y+x;
let add5 = adder(5);
console.log(add5(9));

这个例子也依赖于闭包的概念:x 是一个闭包(注意当我用 9 调用 add5 并返回 14 时它是如何被记住的),这是一个不同的主题,但不应该不要阻止您理解高阶函数的含义。

“person”是函数的参数吗?如果“是”,从哪里开始 路过?

就我而言,您的 persony 相同。那么 y 什么时候通过?答:当我调用 add5 时,它的值为 9。


为了准确参考您的示例,您想知道什么是 person

示例 1

这里:

[1,2,3].filter(person=>person)

person 的值是什么? 1,3 对吗?

现在用这个替换函数 person=>person

示例 2

let filterBy = ()=>person=>person; // Higher order function,just first function doesn't take a parameter
[1,3].filter(filterBy())

例1和例2的区别是例1是我直接写的函数,例2是调用filterBy()生成的。

,

好吧,这只是用最简单的术语编写以下函数的另一种方式:

const persons = [{
    name: 'abc',number: '123456'
  },{
    name: 'def',number: '44233'
  },{
    name: 'xyz',number: '345345'
  },{
    name: 'npe',number: '12312'
  }
];

const searchTerm = 'abc';
const filterPerson = persons.filter((person) => {
  const searchTermLower = searchTerm.toLowerCase();
  return Object.keys(person).some(prop => person[prop].toLowerCase().indexOf(searchTermLower) !== -1)
})

console.log(filterPerson);

如果您仔细观察,我将向 persons.filter 函数传递一个匿名函数。因此,如果我想尽情发挥,我可以将匿名函数编写为一个单独的块,然后将整个函数返回给 persons.filter 函数,以便在我的代码中的多个位置调用它。这正是您在问题中发布的代码段中所做的。

这是我想变得很花哨

const persons = [{
    name: 'abc',number: '12312'
  }
];

const myFunctionThatWasPreviouslyAnonymous = (term) => {
  const searchTermLower = term.toLowerCase()
  return (person) =>
    Object.keys(person)
    .some(prop => person[prop].toLowerCase().indexOf(searchTermLower) !== -1)

}

const searchTerm = 'abc';
const filterPersonFancy = persons.filter(myFunctionThatWasPreviouslyAnonymous(searchTerm));
console.log(filterPersonFancy)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?