我希望find()
函数在找到true
时返回'john'
并停止迭代数组。
或者如果寻找名称则返回false,让我们说maria
,这不在我们的任何对象中。
我不明白我在这段代码中无法实现我所需要的东西?
感谢。
var array = [
{name:'paul',age:20},
{name:'john',age:30},
{name:'albert',age:40}
];
var find = function(arr){
arr.forEach(function(i){
if(i.name === 'john'){
console.log('found him');
return true;
} else {
console.log('not there');
return false;
}
});
};
find(array);
我在这里看到了一些类似的问题,但我无法理解或理解我的问题的答案。显然,我需要该函数能够返回name
值,同时返回true
或false
。
答案 0 :(得分:7)
如果在回调中返回Array#some
值,您可以使用truthy停止迭代。
var array = [{ name: 'paul', age:20 }, { name: 'john', age:30 }, { name: 'albert', age:40 }],
find = function(array, name) {
return array.some(function(object) {
return object.name === name;
});
};
console.log(find(array, 'paul')); // true
console.log(find(array, 'maria')); // false

答案 1 :(得分:1)
您将返回仅在内部函数forEach(function(i) {})
中返回的function(i) {}
,它无法从外部函数find()
返回。此外,您使用return false;
的逻辑似乎也存在问题。只需使用普通的for
循环即可。
var array = [
{name:'paul',age:20},
{name:'john',age:30},
{name:'albert',age:40}
];
var find = function(arr, name) {
for (let i of arr) {
if(i.name === name){
console.log('found ' + name);
return true;
}
}
console.log(name + ' not there');
return false;
};
find(array, 'paul');
find(array, 'maria');

答案 2 :(得分:0)
停止使用forEach
方法并尝试此操作:
var array = [
{name:'paul',age:20},
{name:'john',age:30},
{name:'albert',age:40}
];
var find = function(arr){
var returnValue = false;
for (var i = 0; i <= arr.length; i++) {
if(arr[i].name === 'john') {
ret = true;
break;
}
}
return returnValue;
};
find(array);