我有以下代码块,每个代码块都有相同的用途。出于某种原因,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
或reduce
?
由于
答案 0 :(得分:3)
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。
答案 1 :(得分:1)
forEach()函数将迭代每个元素并调用作为参数给出的回调函数。没有办法在休息或返回时停止它。
如果某些回调函数返回一个值,它对外部函数没有影响,并且对forEach的结果没有任何影响,这在任何情况下都是未定义的。
如果您需要在列表中的每个项目上调用一个可以调用副作用的函数,则应该使用forEach。
请参阅:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach