迭代对象数组时返回 false 或 true [重复]

Posted

技术标签:

【中文标题】迭代对象数组时返回 false 或 true [重复]【英文标题】:return false or true while iterating an array of object [duplicate] 【发布时间】: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

【问题讨论】:

顺便说一句,块语句 /* ... */ 之后不需要分号。 【参考方案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 循环在性能方面并不理想。检查***.com/questions/13645890/… @bukharim96 是的,我并没有打算让它高性能,只是想指出原始代码块的问题

以上是关于迭代对象数组时返回 false 或 true [重复]的主要内容,如果未能解决你的问题,请参考以下文章

JS 数组迭代方法

为啥 all() 为空的可迭代对象返回 True? [复制]

javascript基础:逻辑运算符

Python内置函数之all()

前端-js-数组对象去重方法

javascript学习笔记--迭代函数