【问题标题】:return false or true while iterating an array of object [duplicate]迭代对象数组时返回 false 或 true [重复]
【发布时间】:2018-08-25 19:33:15
【问题描述】:

我希望 find() 函数在找到 'john' 时返回 true 并停止迭代槽数组。 或者如果查找名称,则返回 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

【问题讨论】:

  • 顺便说一句,块语句{ /* ... */ }之后不需要分号。

标签: javascript if-statement foreach return


【解决方案1】:

您可以使用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

【讨论】:

  • 谢谢,我想这正是我想要的。非常适合我。
【解决方案2】:

停止使用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);

【讨论】:

    【解决方案3】:

    您在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');

    【讨论】:

    • 对数组使用for..of 循环在性能方面并不理想。检查stackoverflow.com/questions/13645890/…
    • @bukharim96 是的,我并没有打算让它高性能,只是想指出原始代码块的问题
    猜你喜欢
    • 2020-06-25
    • 1970-01-01
    • 1970-01-01
    • 2019-02-09
    • 2020-11-28
    • 1970-01-01
    • 1970-01-01
    • 2020-07-01
    • 1970-01-01
    相关资源
    最近更新 更多