迭代一个对象数组时返回false或true

时间:2018-03-16 16:42:55

标签: javascript if-statement foreach return

我希望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值,同时返回truefalse

3 个答案:

答案 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);