Tengo una matriz de números y algún límite.
const a = [1,2,1,3,4,1,2]; const limit = 5; ¿Cuál es la forma más javascripty de reducir esta matriz al índice de modo que la suma desde el principio hasta el índice exceda el limit ?
hice
function findIndex(nums, limit) { let s = 0; for (let [index, num] of nums.entries()) { s += num; if (s >= limit) { return index; } } return nums.length; } findIndex([1,2,1,3,4,1,2], 5) 3 ¿Hay una forma más ordenada de hacer esto usando reduce o algo más?
Como busca el índice, puede usar el método de matriz .findIndex() . El siguiente código se suma a la sum de cada elemento en arr y luego verifica si el nuevo valor de la sum acumulada es mayor o igual al límite. Si es así, la devolución de llamada para findIndex devolverá verdadero, brindándole el índice del elemento para el que devolvió verdadero. Si la función de devolución de llamada a findIndex no devuelve verdadero para ningún valor, dará como resultado -1 , que luego puede verificar antes de regresar para ver si necesita devolver la longitud de la matriz o el índice encontrado:
const findIndex = (arr, limit) => { let sum = 0; const idx = arr.findIndex((num, idx) => (sum+=num) >= limit); return idx > 0 ? idx : arr.length; } console.log(findIndex([1,2,1,3,4,1,2], 5));Ya que necesitas la
1) index hasta el cual la sum es mayor o igual al limit
2) Desea return temprano tan pronto como la suma exceda el límite
entonces deberías ir a la vieja escuela for bucle. No hay necesidad de acumular el index y el value usando nums.entries()
function findIndex(nums, limit) { let sum = 0; for (let i = 0; i < nums.length; ++i) { sum += nums[i]; if (sum >= limit) return i; } // Return something explicitely to // indicate that sum can't exceeds limit. // You may return -1 if you like } console.log(findIndex([1, 2, 1, 3, 4, 1, 2], 5));