我有以下代码块,每个代码块都有相同的用途。由于某种原因,for
循环产生的结果与 forEach
循环不同,我不完全确定原因。
this._domains.forEach(domain => {
if ((userDomain.name === domain.domainName) || (userDomain.fullyQualifiedDomainName === domain.netBiosName) ||
(userDomain.name === domain.netBiosName)) { return domain; }
});
}
return null;
<小时/>
for (let index = 0; index < this._domains.length; index++) {
if ((userDomain.name === this._domains[index].domainName) ||
(userDomain.fullyQualifiedDomainName === this._domains[index].netBiosName) ||
(userDomain.name === this._domains[index].netBiosName)) {
return this._domains[index];
}
}
return null;
第二个 for
循环给了我预期的结果,而第一个 forEach
循环似乎每次都会失败或变为 null。
我在这里错过了任何想法或事情吗?即使我不希望从迭代中创建一个新数组,这可能仍然是使用其他高阶技术(例如 map
、filter
或 减少
?
谢谢
最佳答案
forEach
回调中的返回值是回调本身,而不是外部函数。
如果您尝试返回单个值,forEach
是错误的选择。使用find
:
function myFunc( userDomain ) {
return this._domains.find( domain =>
userDomain.name === domain.domainName ||
userDomain.fullyQualifiedDomainName === domain.netBiosName ||
userDomain.name === domain.netBiosName );
}
或者,如果您将结果存储在 myFunc
内声明的变量中,则可以使用 forEach。
关于javascript - 类似的 forEach 与 for 循环的不同行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47930734/