Tengo un caso en el que necesito dividir un rango de números [1, 60] en rangos que tienen 11 en cada uno.
Quiero insertar cada rango en JSON Array, por lo que el resultado esperado sería:
[ {'first: 1, 'last': 11}, // count = 11 {'first: 12, 'last': 22}, // count = 11 {'first: 23, 'last': 33}, // count = 11 {'first: 34, 'last': 44}, // count = 11 {'first: 45, 'last': 55}, // count = 11 {'first: 56, 'last': 60} // the rest, count = 5 ]Mi código hasta ahora:
var count = 11, first = 1, last = 60; var all = []; var starter = first; for(i = first; i <= last; i++){ if(i % count == 0){ all.push({'first': (i - count + (all.length == 0 ? 1 : 0)), 'last': (i-1)}); } } console.log(all);Mi código devuelve solo 5 rangos, no 6 como se esperaba y este código no funciona para todos los casos como [1, 10] y devuelve un resultado incorrecto en muchos otros casos.
var count = 11, first = 1, last = 60; var all = []; for(i = first; i <= last; i += count){ var l = i + count - 1; all.push({'first': i, 'last': l > last ? last : l}); } console.log(all);Podría tomar un múltiplo de conteo y obtener los rangos.
function getRanges(first, to, count) { const result = []; while (first < to) { let last = Math.min(to, (Math.floor(first / count) + 1) * count); if (last + 1 === to) last = to; result.push({ first, last }); first = last + 1; } return result; } console.log(getRanges(1, 60, 11)); console.log(getRanges(1, 11, 5)); .as-console-wrapper { max-height: 100% !important; top: 0; }