es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo hacer que una función de “slice” se acerque más a la nativa? ¿En la forma en que es invocada?

Cómo hacer una función de “slice” manualmente y ser invocada de manera similar o muy cercana a como se hace en JavaScript, por ejemplo:

let arr = [0, 1, 2, 3, 4, 5]

Función en JavaScript:

arr = arr.slice(1, 3)  // devuelve: [1,2]

El resultado que quiero:

arr = arr.myManualSlice(1, 3) // devuelve: [1,2]

Si este ejemplo anterior es imposible de realizar, me gustaría hacerlo lo más cercano posible. Lo más cercano que pude hacer fue lo siguiente:

function myManualSlice(arr, init, end) {
    let result = []

    if (end == null) {
        for (let i = 0; i < arr.length; i++) {
            if (i >= init) {
                result.push(arr[i])
            }
        }
    } else {
        for (let i = 0; i < arr.length; i++) {
            if (i >= init && i < end) {
                result.push(arr[i])
            }
        }
    }

    return result
}

let arr = [0, 1, 2, 3, 4, 5]

Mi resultado más cercano:

arr = myManualSlice(arr, 1, 3) // devuelve: [1,2]

NOTA: No me interesa cómo hacer la implementación de la función en sí, ya que hay muchas formas diferentes de hacerlo y la función devuelve lo que espero. Solo me interesa hacer la invocación de la función de manera similar a la función “slice” de JavaScript. La lógica del cuerpo de la función solo puede ser cambiada con este propósito.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para hacer una función personalizada que pueda invocarse de manera similar a la forma en que se invoca la función “slice” en JavaScript, puedes agregar la nueva función como un método de prototipo del objeto Array. Aquí tienes un ejemplo de cómo hacerlo:

    Array.prototype.myManualSlice = function(start, end) {
      return this.slice(start, end);
    }
    
    let arr = [0, 1, 2, 3, 4, 5];
    arr = arr.myManualSlice(1, 3); // devuelve: [1,2]
    

    En este código, agregamos una nueva función llamada “myManualSlice” al prototipo del objeto Array. La función toma dos parámetros, que son los índices de inicio y fin para la operación de rebanado. La función simplemente llama al método “slice” del array sobre el cual se invoca, pasando los parámetros de inicio y fin.

    Ahora, puedes invocar la función “myManualSlice” en cualquier objeto array de la misma forma en que invocarías el método “slice” incorporado en JavaScript.

Comments are closed.