Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

354
Visualizações
¿Por qué el método de filtro no parece funcionar de la misma manera que el empalme en esta aplicación de tareas pendientes?

Tengo una aplicación de tareas pendientes en JS con las siguientes funciones:

Esto es parte de una función que pasa una identificación a un detector de eventos para eliminar una tarea pendiente

 removeButton.addEventListener('click', function () { removeTodo(todo.id) renderTodos(todos, filters) })

Esta función elimina las tareas pendientes: he usado 2 enfoques, la forma findIndex funciona muy bien, elimina las tareas pendientes y hace que los nuevos todos estén bien. Pensé que el enfoque de filtro que he comentado también funcionaría, pero no lo hace, lo hace. elimine el todo pero no actualiza automáticamente la lista en el navegador a menos que actualice la página, mientras que splice lo hace automáticamente, ¿por qué podría suceder esto? ¿Podría estar esperando actualizar el almacenamiento local antes de que renderTodos comience a leer la lista? Solo una nota de que en el ejemplo que no funcionó, estaba pasando newTodos a la función de guardar, solo lo cambié a todos para la forma de empalme.

 const removeTodo = function (id) { const todoIndex = todos.findIndex(function (todo) { return todo.id === id }) if (todoIndex > -1) { todos.splice(todoIndex, 1) } // newTodos = todos.filter(function (todo) { // return todo.id !== id // }) saveTodos(todos) }

la lista de tareas se guarda en el almacenamiento local

 const saveTodos = function (todos) { localStorage.setItem('todos', JSON.stringify(todos)) }

Aquí está la función de renderizado para obtener información.

 const renderTodos = function (todos, filters) { const filteredTodos = todos.filter(function (todo) { const searchTextMatch = todo.text.toLowerCase().includes(filters.searchText) const hideCompletedMatch = !filters.hideCompleted || !todo.completed return searchTextMatch && hideCompletedMatch }) const todosLeft = filteredTodos.filter(function (todo) { return !todo.completed }) document.querySelector('#todos').innerHTML = '' document.querySelector('#todos').appendChild(generateSummaryDom(todosLeft)) filteredTodos.forEach(function (todo) { document.querySelector('#todos').appendChild(generateTodoDom(todo)) }) }
about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Reasignar una variable no tiene efectos secundarios; la reasignación de un identificador no tiene ningún efecto sobre los identificadores en otros lugares. Haciendo

 newTodos = todos.filter(function (todo) { return todo.id !== id }) saveTodos(todos) }

significa que ha puesto algunos resultados en newTodos sin hacer nada más con él. No se almacena (ni se procesa, aunque no se muestra cómo se procesa).

Pase los nuevos todos filtrados y renderice (como sea que lo esté haciendo) desde allí, y no olvide declarar sus variables.

 const newTodos = todos.filter(function (todo) { return todo.id !== id }) saveTodos(newTodos); renderTodos(newTodos);

mientras saca renderTodos de la devolución de llamada inmediata del oyente.

about 4 years ago · Juan Pablo Isaza Relatório

0

splice() muta la matriz de todos que luego está procesando, mientras que filter() devuelve una nueva matriz que no está utilizando.

Para que funcione con filter() , deberá devolver los newTodos desde la función de eliminación y representar la matriz devuelta, no la matriz original de todos .

 removeButton.addEventListener('click', function () { const newTodos = removeTodo(todo.id); saveTodos(newTodos) renderTodos(newTodos, filters); }) const removeTodo = function (id) { return todos.filter(todo => todo.id !== id) } const saveTodos = function (todos) { localStorage.setItem('todos', JSON.stringify(todos)) }
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda