在ES6中,Array的find方法是否执行线性搜索?

时间:2019-07-31 00:08:02

标签: javascript arrays ecmascript-6 find

我需要对数字数组执行线性搜索。如果我使用find(),是否可以保证从索引0开始进行线性搜索?

我意识到我可以简单地使用for循环,但是想使用更优雅的东西。

2 个答案:

答案 0 :(得分:2)

是的,它总是从索引0开始,每次迭代递增1,并返回与条件匹配的第一个元素。例如:

const arr = [{ id: 1, name: 'a' }, { id: 2, name: 'b' }, { id: 1, name: 'c' }];

console.log(
  arr.find(obj => obj.id === 1)
);

here描述了Array.prototype.find所需实现的详细信息:

  
      
  1. 让k为0。
  2.   
  3. 重复,而k      

    a。令Pk为ToString(k)。

         

    b。令kValue为Get(O,Pk)。

         

    c。 ReturnIfAbrupt(kValue)。

         d。令testResult为ToBoolean(Call(predicate,T,«kValue,k,O»))。

         

    e。 ReturnIfAbrupt(testResult)。

         

    f。如果testResult为true,则返回kValue。

         

    g将k增加1。

  4.   
  5. 返回未定义。

  6.   

如您所见,它使k每次迭代增加1,检查每个值的测试是否通过,并进行return的校验,就像for循环可以做到的那样。 break

答案 1 :(得分:2)

是的。 specification states:

  

find对数组中的每个元素以升序调用一次谓词,直到找到谓词返回true的谓词