gpt4 book ai didi

javascript - 为什么 If 语句被视为此循环中的函数?

转载 作者:行者123 更新时间:2023-11-28 17:18:44 24 4
gpt4 key购买 nike

我一直在构建一个经常使用迭代的 React 应用程序。我正在使用 JSLint 并收到恼人的警告:

Don't make functions within a loop

在以下循环中:

if(currentSearch[i].users.length > 0) {
var matched = false;

//I hate how JSLint just can't handle setting a variable to true within a function
//this is loop where I get the warning
currentSearch[i].users.some(childUser => {
if(childUser.id === user.id) {
return matched = true;
}
})
//^^^^^ Warning

if(!matched) {
var alert = new AlertObject(user,currentSearch[i],true,false);
alerts.push(alert);
}
}

我认为我没有在循环中设置函数?我正在使用 array.some 函数,如果我返回 true,它将中断循环,这就是我所做的。我将一个在循​​环外部声明的变量返回为 true。这使我摆脱了循环,并允许我执行下面的逻辑。

我还应该指出,这也完全在循环内,因为我们正在迭代当前的搜索用户。我没有遇到运行时或编译错误,并且此代码工作正常,但也许我正在为将来的灾难做好准备。

有什么想法为什么我会收到此错误吗?如果我缺少一些最佳实践?

最佳答案

由于在第一行中您引用了 currentSearch[i],因为 [i] 我假设您粘贴到此处的整个代码块位于某种循环内,可能是一个for

然后,您将为 Array.some 回调创建一个函数,这会触发错误。

一种解决方案是将回调声明移至父循环之外,但由于您使用的是作用域中的变量,因此需要进行一些重构。

<小时/>

可能的解决方案

您可以在父循环外部(您在此处提供的代码外部)声明一个函数来检查子用户。

//Please provide a better name for the function according to the context.
const checkChildUser = function (childUser) {
return this.id === childUser.id;
};

然后将其传递给您正在使用的 Array.some 函数:

currentSearch[i].users.some(checkChildUser, user);

关于javascript - 为什么 If 语句被视为此循环中的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52896511/

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