foreach循环和返回undefined的值

时间:2016-03-04 08:52:03

标签: javascript foreach undefined return-value

我想知道是否有人可以解释为什么此函数返回 undefined 而不是已创建的对象

var people = [
  {name: 'John'},
  {name: 'Dean'},
  {name: 'Jim'}
];

function test(name) {
  people.forEach(function(person){
    if (person.name === 'John') {
      return person;
    }   
  });
}

var john = test('John');
console.log(john);

// returning 'undefined'

2 个答案:

答案 0 :(得分:6)

返回forEach循环不起作用,您在forEach回调函数上,而不在test()函数上。因此,您需要从forEach循环外部返回值。

var people = [{
  name: 'John'
}, {
  name: 'Dean'
}, {
  name: 'Jim'
}];

function test(name) {
  var res;
  people.forEach(function(person) {
    if (person.name === 'John') {
      res = person;
    }
  });
  return res;
}

var john = test('John');
console.log(john);

或者,如果要从数组中查找单个元素,请使用 find()

var people = [{
  name: 'John'
}, {
  name: 'Dean'
}, {
  name: 'Jim'
}];

function test(name) {
  return people.find(function(person) {
    return person.name === 'John';
  });
}

var john = test('John');
console.log(john);

答案 1 :(得分:0)

你有两种可能性

Array#filter()的结果集:

// returns true or false
function test(name) {
    return people.some(function(person){
        return person.name === 'John';
    });
}
如果给定名称位于包含Array#some()的数组中,则为

或布尔值:

if (condition) {
  debugger;
}