问题描述
我想创建一个带有两个参数的函数:第一个是 itemsArray,第二个是 itemName。那么这个函数应该根据天气返回 true 或 false,itemsArray 是否包含 itemName。
我使用了高阶数组方法 forEach 但由于某种原因它一直返回 undefined...
我想知道为什么?
注意:我已经想出了其他解决方案来使这个函数工作,但我想知道这个特定函数返回 undefined 的原因..如果有人能向我解释,我将不胜感激
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 而不是从 itemExist() 函数返回。
使用 forEach 实现以下情况的方法如下:
let items = ['item-1','item-2','item-3','item-4'];
function itemExist(itemList,itemName) {
let isItemPresent = false;
itemList.forEach( (item) => {
if(item === itemName) {
isItemPresent = true;
return;
}
})
if(isItemPresent) {
return true;
} else {
return false;
}
}
console.log(itemExist(items,'item-3')) // expected output: true
console.log(itemExist(items,'item-5')) // expected output: false
,
let items = ['item-1',itemName) {
// forEach wouldn't return anything
// forEach internal function didn't return out you from outer function
itemList.forEach( (item) => {
return item === itemName
})
/* if you won't return anything your function
it will return undefined by default
*/
}
console.log(itemExist(items,'item-3')) // expected output: undefined
console.log(itemExist(items,'item-5')) // expected output: undefined
// correct way
console.log(items.includes('item-3')) // true
console.log(items.includes('item-5')) // true
console.log(items.includes('item-9')) // false