对于vs forEach问题

时间:2014-10-02 19:46:46

标签: javascript node.js

如果for和forEach都是同步的,为什么forEach循环不起作用并且在这种情况下总是返回false?我一直都在考虑它太早,我犯了一个明显的错误。两个案例都说他们找到了一场比赛:

var items = [{
  Code: 'BLAH',
  ItemID: 'FOO'
}];

console.log(findItem('BLAH')); // FOO
console.log(findItem2('BLAH')); // false

function findItem(sku) {
  for(var i in items) {
    if(items[i].Code === sku) {
      console.log('Match found - for'):
      return items[i].ItemID;
    }
  }
  return false;
}

function findItem2(sku) {
  items.forEach(function(item) {
    if(item.Code === sku) {
      console.log('Match found - forEach'):
      return item.ItemID;
    }
  });
  return false;
}

1 个答案:

答案 0 :(得分:3)

您传递给return的回调中的.forEach()只是终止该函数调用,而不是" findItem2"呼叫。换句话说,.forEach()机制本身已经调用了你传递它的函数,而你的return语句只是从那里返回;整个过程仍在继续。没有什么能够关注你返回的价值。

这是普通for循环可能更清晰的情况。某些函数框架可能提供.forEach()之类的东西,专门用于查找满足给定条件的列表中第一个元素的任务。