我想知道是否有人可以解释为什么此函数返回 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'
答案 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;
}