我怎样才能将Array.find与foreach等迭代器进行比较..?

时间:2017-01-04 19:30:04

标签: javascript arrays loops for-loop

我经常使用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和其他迭代器在性能,用法,内部功能等方面的区别......

3 个答案:

答案 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),例如: forEachmapfilterreducereduceRightsomeeveryfind和{ {1}}。

findIntex外,其中大部分都提供了迭代本身以外的其他功能。

答案 1 :(得分:3)

  

find()方法返回数组中第一个元素的值   满足提供的测试功能。否则未定义   返回。

find函数使用回调函数,例如:

function isBigEnough(element) {
   return element >= 15;
}
[12, 5, 8, 130, 44].find(isBigEnough);

find方法对数组中存在的每个元素执行一次回调函数,直到找到一个回调返回true值的元素。如果找到这样的元素,find会立即返回该元素的值。

findO(1)相比,O(n)功能的效果各不相同,可能是forEachfor或更低,其中复杂性为总是 O(n),因为您必须迭代所有array

答案 2 :(得分:1)

使用for / forEach进行迭代是指您需要触摸或检查集合中的每个对象。 find方法就是当你知道你在寻找什么时,只想快速搜索一下它是否存在。