首页 > 解决方案 > 如何限制 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达到所需限制时停止。

标签: javascript

解决方案


基本上你可以使用一个生成器函数,它可以通过一个自制的限制来停止,就像下面的函数一样

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,它将迭代生成器函数的迭代器


推荐阅读