【问题标题】:forEach function returns undefined for some reasonforEach 函数由于某种原因返回 undefined
【发布时间】: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.someArray.prototype.indexOfArray.prototype.includes
  • 你不能从forEach 中返回(每次迭代只是运行你传递给它的回调,返回值不被封闭的 forEach 使用)并且forEach 本身返回未定义的定义,(参见前面的链接到文档)。如果要退出迭代,则需要使用 for 循环。否则,您需要在forEach 之外声明一个变量,从循环内分配它,然后返回它

标签: javascript arrays foreach


【解决方案1】:

你得到 undefined 的主要原因是你从 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

【讨论】:

    【解决方案2】:
    let items = ['item-1','item-2','item-3','item-4'];
    
    function itemExist(itemList, 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
    

    【讨论】:

      猜你喜欢
      • 2018-01-28
      • 2020-03-26
      • 1970-01-01
      • 2020-10-02
      • 1970-01-01
      • 1970-01-01
      • 2015-02-09
      • 1970-01-01
      • 2014-11-22
      相关资源
      最近更新 更多