【发布时间】:2021-07-06 02:02:51
【问题描述】:
我想创建一个带有两个参数的函数:第一个是 itemsArray,第二个是 itemName。那么这个函数应该根据itemsArray是否包含itemName的天气返回true或false。
我使用了高阶数组方法为每个但由于某种原因它一直返回未定义......
我想知道为什么?
注意:我已经想出了其他解决方案来使这个函数工作,但我想知道这个特定函数返回未定义的原因。如果有人可以向我解释,将不胜感激
let items = ['item-1','item-2','item-3','item-4'];
function itemExist(itemList, itemName) {
itemList.forEach( (item) => {
return item === itemName
})
}
console.log(itemExist(items, 'item-3')) // expected output: true
console.log(itemExist(items, 'item-5')) // expected output: false
// it return undefined instead ?
此处代码
【问题讨论】:
-
forEach()返回未定义,你需要includes()--function itemExist(itemList, itemName) { return itemList.includes(itemName)}; -
您可以在这里简单地使用 indexOf 之类的东西。如果你这样做是为了练习,你应该知道你没有从你的函数中返回任何东西。一个提示是在 forEach 之外有一个变量,一旦在 forEach 中找到您的数组元素,该变量就会变为真。然后你可以返回那个变量。
-
@pilchard我想知道它返回未定义的原因
-
您正在从
forEach返回 bool 值,但您没有从实际函数返回任何内容。如果您想保留这种方法,您可以将返回结果分配到函数内的变量中。然后返回该变量。或者你可以试试Array.protytype.some、Array.prototype.indexOf或Array.prototype.includes。 -
你不能从
forEach中返回(每次迭代只是运行你传递给它的回调,返回值不被封闭的 forEach 使用)并且forEach本身返回未定义的定义,(参见前面的链接到文档)。如果要退出迭代,则需要使用for循环。否则,您需要在forEach之外声明一个变量,从循环内分配它,然后返回它
标签: javascript arrays foreach