forEach 函数由于某种原因返回 undefined

问题描述

我想创建一个带有两个参数的函数:第一个是 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