javascript - 如何在不循环整个数组的情况下找到与条件匹配的前 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 个结果。
请问最有效的方法是什么?
解决方案
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)
推荐阅读
- java - 二维数组不起作用
- python - 比较和对比 DNNClassifier 和 DNNLinearCombinedClassifier
- java - `setBufferedSize()` 方法有什么作用?
- regex - 角度正则表达式获取网址的最后部分
- javascript - Meteor react设计——嵌套组件:函数调用
- json - 发送 res json 以返回请求 [nodeJs]
- python - 如何按重量缩放列表?
- rust - 静态和非静态参数的不同实现
- android - Crashlytics 在某些崩溃时缺少符号
- sql-server - 表上超过 1 个(插入、更新)触发器不起作用 - 为什么?可能吗?