这是我关于SO的第一个问题。我有一个任务,我应该创建一个有两个参数的函数 - 第一个是字符串数组,第二个是可能在数组中匹配的字符串。
我有两个功能变体:一个使用"用于"循环,另一个使用.forEach()方法。 for循环准确地返回" true" /" false"取决于数组中是否存在第二个参数。 forEach总是返回" false"。
有人可以解释原因吗?代码如下:
.forEach()版本:
function insideArray (array, word) {
var value;
array.forEach(function(each) {
if(each === word) {
value = "true";
return value;
}
else {
value = "false";
}
});
return value;
}
for loop version:
function insideArray (array, word) {
var value;
for(var i = 0; i < array.length; i++) {
if(array[i] === word) {
value = "true";
return value;
}
else {
value = "false";
}
}
return value;
}
示例数组:
var heroArray = [ "spiderman", "wolverine", "batman", "greenArrow", "boosterGold" ];
测试.forEach():
insideArray(heroArray, "spiderman");
"false"
测试循环:
insideArray(heroArray, "spiderman");
"true"
提前感谢您的帮助!
答案 0 :(得分:3)
这是因为您从forEach的回调函数返回而不是从insideArray()
返回,所以最后insideArray()
将始终返回false,除非您匹配数组中的最后一个元素。您可以通过使用false初始化值并删除其他条件来修复代码:
function insideArray (array, word) {
var value = "false";
array.forEach(function(each) {
if(each === word) {
value = "true";
}
});
return value;
}
另请注意,您可以使用indexOf
:
function insideArray (array, word) {
return array.indexOf(word) >= 0 ? "true" : "false";
}
答案 1 :(得分:2)
.forEach
方法不会返回任何内容,因此我会将您的代码修改为以下内容:
function insideArray (array, word) {
var value = "false";
array.forEach(function(each) {
if(each === word) {
value = "true";
}
});
return value
};