gpt4 book ai didi

javascript - 将范围绑定(bind)到 forEach 循环中的项目

转载 作者:行者123 更新时间:2023-12-04 08:56:52 25 4
gpt4 key购买 nike

这对我来说很难在标题中解释,所以我将举一个例子来更好地解释:
我想传递一个函数,例如 ()=>{console.log(this.operatorValue)} , 作为递归 traverseCriteria 的参数功能。
traverseCriteria 函数

  function traverseCriteria(arr, parameters,fn) {
for (const item of arr) {
if (Array.isArray(item))
this.traverseCriteria(item, parameters)
else if (typeof item === 'object'){
item.operatorValue = parameters[item.Property]
console.log(item.operatorValue) ///<-- REPLACE THIS WITH fn()
//fn()
}
}
return arr
}
在上面的函数中,我希望能够替换 console.log(item.operatorValue)与 fn();
    const criteria =  [
"and",
{
"Collection": "persons",
"Property": "phone",
"operator": "eq",
"operatorValue": "23138213"
},
{
"Collection": "persondetails",
"Property": "country",
"operator": "eq",
"operatorValue": "Russia"
}
]
const parameters = { phone: "23138213", "country": "Russia" };
函数调用:
  traverseCriteria(criteria,parameters,()=>{console.log(this.operatorValue)}); 

最佳答案

您可以使用 .call .apply 设置this函数的值:

fn.call(item)
但是,请记住箭头函数没有自己的 this值,所以要完成这项工作,您必须传递一个“正常”函数。

关于javascript - 将范围绑定(bind)到 forEach 循环中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63774641/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com