首页 > 解决方案 > 如何在不循环整个数组的情况下找到与条件匹配的前 n 个数组项

问题描述

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

问题是这样做:

const results = largeArray.filter(item => checkItemValidity(item)).slice(0, 100);

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

这样做:

const results = largeArray.slice(0, 100).filter(item => checkItemValidity(item));

可能返回少于 100 个结果。

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

标签: javascriptarrays

解决方案


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)


推荐阅读