¿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.
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:
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.