迭代对象数组时返回 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
值并同时返回 true
或 false
。
【问题讨论】:
顺便说一句,块语句 /* ... */
之后不需要分号。
【参考方案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 [重复]的主要内容,如果未能解决你的问题,请参考以下文章