mi código es el siguiente
sortedProducts = sortedProducts.filter((product, i) => { if (i + 1 > limit) { return false; } return product.name.startsWith(search); }); quiero dejar de iterar en el index = limit para poder optimizar mi función porque no hay necesidad de elementos con index > limit ¿hay algo similar a la palabra break en este caso? Gracias por adelantado
Array#filter ejecuta la devolución de llamada en cada elemento:
La función es un predicado, para probar cada elemento de la matriz. Devuelve un valor que fuerza a verdadero para mantener el elemento, o a falso en caso contrario.
Por lo tanto, en lugar de iterar innecesariamente sobre el resto de los elementos, puede obtener el subarreglo primero usando Array#slice :
sortedProducts = sortedProducts .slice(0, limit) .filter(product => product.name.startsWith(search));Otra forma de "romperse" realmente del bucle:
const arr = []; for(let i = 0; i < sortedProducts.length; i++) { if (i + 1 > limit) { break; } if(sortedProducts[i].name.startsWith(search)) { arr.push(sortedProducts[i]); } }Si desea usar métodos de Array.prototype y atajarlos, puede usar Array.prototype.some
const collection = []; sortedProducts .some(function(product,i){ if(this.length >= limit){ return 1; } if(product.name.startsWith(search)){ this.push(product) } },collection) Estoy pasando una matriz como this a some método. También puede hacer esto con map , forEach , every , etc.
En lugar de this.length , puede adjuntar una propiedad arbitraria como this._iteration e incrementar eso, etc. Otra opción es dividir la matriz como sugirió @Majed, o simplemente usar un buen bucle antiguo y romper con eso.
La forma más eficiente es procesar sus arreglos como iterables. De esa manera, siempre iterará a través de los valores solo una vez, mientras aplica la cantidad de operaciones que desee.
El siguiente ejemplo se basa en la biblioteca iter-ops :
import {pipe, filter, take} from 'iter-ops'; // define your sortedProducts, + search + limit here; const result = pipe( sortedProducts, filter(product => product.name.startsWith(search)), take(limit) ); console.log([...result]); // prints your found products