javascript - 如何限制 10 个结果 array.filter?
问题描述
我有一个大数组,我想进行自动完成搜索,但我只想显示 10 个结果,所以在找到 10 个结果时停止遍历数组。我做了这个:
let items = array.filter(r => r.indexOf(term)!=-1);
console.log(items.length) // lots of items, need to be limited to 10
它有效,但我不知道如何在array.filter
达到所需限制时停止。
解决方案
基本上你可以使用一个生成器函数,它可以通过一个自制的限制来停止,就像下面的函数一样
function *filter(array, condition, maxSize) {
if (!maxSize || maxSize > array.length) {
maxSize = array.length;
}
let count = 0;
let i = 0;
while ( count< maxSize && i < array.length ) {
if (condition(array[i])) {
yield array[i];
count++;
}
i++;
}
}
const array = [1, 2, 3, 4, 5, 6, 7, 8, 9];
console.log( Array.from( filter(array, i => i % 2 === 0, 2 ) ) ); // expect 2 & 4
所以它会在达到maxSize作为参数后停止,并且为了方便地将它返回到一个数组中,可以使用Array.from,它将迭代生成器函数的迭代器
推荐阅读
- javascript - 对象解构中会跳过哪些属性?
- scala - Akka-Quartz-Scheduler,如何使用cron表达式
- r - 如何在R中的循环中运行具有多个不同长度参数的函数
- android - 在附加了 viewpager 的片段中附加带有微调器的项目选定侦听器的正确方法
- c - 如何实现http2流客户端?
- ios - iOS 在后台通过 UDP 连接发送视频(屏幕共享)数据包
- ionic-framework - IONIC3 - WriteFile & WriteExistingFile 无法覆盖文件
- vue.js - Element UI 文件上传比较文件类型
- excel - 使用vba将单元格从一个工作簿复制到excel中的另一个工作簿
- android - 约束布局是否可能