我经常使用for
循环,forEach
循环,Array.map
等来迭代数组。我开始知道我们也可以使用Array.find
来循环数组,它也可以根据条件返回数组中匹配的值:
我使用Array.find()
和for
循环迭代对象数组,如下所示
使用Array.find:
[{
name: "John"
}, {
name: "Cannady"
}, {
name: "Sherlock"
}].find(function(oArrayObject) {
console.log(oArrayObject)
});
在控制台上输出:
{name: "John"}
{name: "Cannady"}
{name: "Sherlock"}
使用for循环:
var aNames=[{
name: "John"
}, {
name: "Cannady"
}, {
name: "Sherlock"
}]
for(var i=-0;i<aNames.length;i++){
console.log(aNames[i]);
}
在控制台上输出:
{name: "John"}
{name: "Cannady"}
{name: "Sherlock"}
两个代码都做了同样的事情。
Array.find()优先于for循环??
哪一个能提供更好的性能?
请解释一下array.find和其他迭代器在性能,用法,内部功能等方面的区别......
答案 0 :(得分:3)
Array#find
用于在数组中找到与谓词匹配的项,并将其返回。当Array.find
返回时,循环结束。性能方面,如果您寻找的项目不是最后一项,则不必迭代整个数组。
var result = [{
name: "John"
}, {
name: "Cannady"
}, {
name: "Sherlock"
}].find(function(o) {
return o.name.startsWith('Ca');
});
console.log(result);
有许多方法可以迭代数组(see array in mdn),例如:
forEach
,map
,filter
,reduce
,reduceRight
,some
,every
,find
和{ {1}}。
除findIntex
外,其中大部分都提供了迭代本身以外的其他功能。
答案 1 :(得分:3)
find()方法返回数组中第一个元素的值 满足提供的测试功能。否则未定义 返回。
find
函数使用回调函数,例如:
function isBigEnough(element) {
return element >= 15;
}
[12, 5, 8, 130, 44].find(isBigEnough);
find方法对数组中存在的每个元素执行一次回调函数,直到找到一个回调返回true值的元素。如果找到这样的元素,find会立即返回该元素的值。
与find
和O(1)
相比,O(n)
功能的效果各不相同,可能是forEach
或for
或更低,其中复杂性为总是 O(n)
,因为您必须迭代所有array
。
答案 2 :(得分:1)
使用for / forEach进行迭代是指您需要触摸或检查集合中的每个对象。 find方法就是当你知道你在寻找什么时,只想快速搜索一下它是否存在。