7.0 KiB
title | localeTitle |
---|---|
Drop it | Déjalo caer |
Recuerda usar Read-Search-Ask
si te atascas. Tratar de emparejar el programa y escribe tu propio código
Explicación del problema:
Básicamente, mientras que el segundo argumento no es verdadero, tendrá que eliminar el primer elemento de la izquierda de la matriz que se pasó como primer argumento.
Enlaces relevantes
Sugerencia: 1
Puede usar Array.prototype.shift()
o el filtro con el que debería estar más familiarizado para resolver este problema en unas pocas líneas de código.
intenta resolver el problema ahora
Sugerencia: 2
Shift devuelve el elemento que se eliminó, el cual no necesitamos realmente, todo lo que necesitamos es la matriz modificada que queda.
intenta resolver el problema ahora
Sugerencia: 3
Si aún no puede descubrir cómo resolverlo con shift, intente resolverlo con filtro y verifique cómo funciona el filtro. Si se familiariza con él, puede hacer el código con shift.
intenta resolver el problema ahora
¡Alerta de spoiler!
¡Solución por delante!
Solución de código básico:
function dropElements(arr, func) {
// drop them elements.
var times = arr.length;
for (var i = 0; i < times; i++) {
if (func(arr[0])) {
break;
} else {
arr.shift();
}
}
return arr;
}
// test here
dropElements([1, 2, 3, 4], function(n) {return n >= 3;})
Explicación del código:
- Crea un bucle for para comprobar cada elemento.
- Luego verifique la función dada si es verdadera, luego deténgase, de lo contrario elimine ese elemento.
- devuelve la matriz.
Enlaces relevantes
Solución de código intermedio:
function dropElements(arr, func) {
return arr.slice(arr.findIndex(func) >= 0 ? arr.findIndex(func): arr.length, arr.length);
}
// test here
dropElements([1, 2, 3, 4], function(n) {return n >= 3;});
Explicación del código:
- Use la función
findIndex()
ES6 para encontrar el índice del elemento que pasa la condición - Corte la matriz desde el índice encontrado hasta el final
- ¡Hay un caso de borde! si la condición no se cumple con cualquiera de los elementos, 'findIndex' devolverá
-1
que desordena la entrada aslice()
. En este caso, use un operador condicional simple para devolverfalse
lugar de-1
. Y el operador ternario (? devuelve el índice encontrado de los elementos requeridos cuando la condición estrue
y, de lo contrario, la longitud de la matriz, de modo que el valor de retorno sea una matriz vacía como se indica.
Enlaces relevantes
Solución avanzada de código:
function dropElements(arr, func) {
while(arr.length > 0 && !func(arr[0])) {
arr.shift();
}
return arr;
}
// test here
dropElements([1, 2, 3, 4], function(n) {return n >= 3;});
Explicación del Código
- Use un bucle while con
Array.prototype.shift()
para continuar verificando y soltando el primer elemento de la matriz hasta que la función devuelva true. También se asegura de que la matriz no esté vacía primero para evitar bucles infinitos. - Devuelve la matriz filtrada.
Enlaces relevantes
NOTAS PARA LAS CONTRIBUCIONES:
- NO agregue soluciones que sean similares a las soluciones existentes. Si cree que es similar pero mejor , intente fusionar (o reemplazar) la solución similar existente.
- Agregue una explicación de su solución.
- Categorice la solución en una de las siguientes categorías: Básica , Intermedia y Avanzada .
- Agregue su nombre de usuario solo si ha agregado algún contenido principal relevante . ( NO elimine ningún nombre de usuario existente )
Ver
Wiki Challenge Solution Template
para referencia.