Imagina una lista de elementos:
const data = [0, 1, 2, 3, 4, 5]Una variable representa el elemento principal:
const initialIndex = 1;Y la otra variable, la cantidad de elementos extra que también se recogerán detrás del "elemento principal".
const extraCount = 2;Entonces, si por ejemplo, llamo al método "algoritmo" de la siguiente manera:
function algorithm(data, initialIndex, extraCount) { ... } console.log(algorithm(data, 2, 1)); Me devolverá [1, 2] // El índice inicial y el primer elemento detrás de él
O, si por ejemplo vuelvo a llamar con
console.log(algorithm(data, 4, 3)); Me devolverá [1, 2, 3, 4] // El elemento inicial y 3 elementos detrás de él
¿Cómo puedo hacer, de una manera sencilla, para solucionar este caso de uso
console.log(algorithm(data, 1, 2)); // Negative index...Pero... necesito devolver al menos los artículos posibles.
Quiero decir:
Para console.log(algorithm(data, 1, 2)); Obtengo [0, 1] // Índice inicial y el primer elemento anterior (no dos porque el segundo tiene un índice negativo)
Para console.log(algorithm(data, 2, 5)); obtengo [0, 1, 2]
Para console.log(algorithm(data, 0, 10)); obtengo [0]
Para console.log(algorithm(data, 3, 7)); obtengo [0, 1, 2, 3]
Esto es lo que he probado
const data = [0, 1, 2, 3, 4]; const initialIndex = 2; const extraCount = 2; const start = initialIndex - extraCount >= 0 ? initialIndex - extraCount : initialIndex; const end = initialIndex + 1; console.log(data.slice(start, end));Lo tienes correcto. Simplemente reemplace initialIndex por 0 en otra condición
const data = [0, 1, 2, 3, 4]; let func = (initialIndex,extraCount) => { const start = initialIndex - extraCount >= 0 ? initialIndex - extraCount : 0; const end = initialIndex + 1; console.log(data.slice(start, end)); }; func(2,2); func(1,2); func(3,7);Nota: hay muchas otras formas de hacerlo, pero esta es la que buscabas, así que solo señalé el problema.
Puede usar slice(-count) para devolver elementos desde el final de la matriz, algo como esto:
if (extraCount > initialIndex) { return [ // This will return elemnts from beginning of array up to initialIndex ...data.slice(0, initialIndex), // This will return the missing elements looped from the other side of array ...data.slice(extraCount - initialIndex) ]; }También debe incorporar otros controles de cordura en su código, o por ejemplo, el número total de elementos no debe exceder la longitud de la matriz, etc.