如何在不遍历整个数组的情况下找到与条件匹配的前 n 个数组项

Jay*_*ist 9 javascript arrays

我试图在一个非常大的数组中找到与条件匹配的前 100 个项目,为了效率,我更愿意在找到这 100 个后结束循环,因为匹配项目的方法很昂贵。

问题是这样做:

const results = largeArray.filter(item => checkItemValidity(item)).slice(0, 100);
Run Code Online (Sandbox Code Playgroud)

在返回前100个之前会在大数组中找到所有结果,这对我来说太浪费了。

这样做:

const results = largeArray.slice(0, 100).filter(item => checkItemValidity(item));
Run Code Online (Sandbox Code Playgroud)

可能返回少于 100 个结果。

请问这样做最有效的方法是什么?

cha*_*tfl 8

而不是把一个条件和break一个内for循环,只需添加额外的长度检查的for条件本身

const data = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14"],
      isValid = n => !(n%2),
      res = [],
      max = 5;

for (let i = 0; i < data.length && res.length < max; i++) {
   isValid(data[i]) && res.push(data[i]);
}

console.log(res)
Run Code Online (Sandbox Code Playgroud)