"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como filtrar uma matriz JavaScript de objetos com base em múltiplas condições?

Como filtrar uma matriz JavaScript de objetos com base em múltiplas condições?

Publicado em 2024-11-08
Navegar:539

How to Filter a JavaScript Array of Objects Based on Multiple Conditions?

Filtrando matrizes em JavaScript com base em múltiplas condições

Declaração do problema

Dada uma matriz de objetos e um objeto de filtro, o objetivo é filtrar e simplifique a matriz com base em várias condições especificadas no filtro. No entanto, um problema específico surge quando o filtro contém várias propriedades.

Solução proposta

Considere o seguinte segmento de código:

function filterUsers(users, filter) {
  var result = [];
  for (var prop in filter) {
    if (filter.hasOwnProperty(prop)) {
      // Iterate over the array
      for (var i = 0; i 

Na solução proposta, o problema ocorre quando o filtro contém múltiplas propriedades. Especificamente, durante a segunda iteração, a comparação entre users[i][prop] e filter[prop] está incorreta. Para corrigir isso, podemos modificar o código para o seguinte:

function filterUsers(users, filter) {
  var result = [];
  for (var prop in filter) {
    if (filter.hasOwnProperty(prop)) {
      // Apply filter on the array
      users = users.filter((user) => user[prop] === filter[prop]);
    }
  }
  return result;
}

Nesta versão, utilizamos o método de filtro integrado de matrizes para aplicar as condições de filtro dinamicamente. Isso garante que apenas objetos que atendam a todas as condições especificadas sejam incluídos no resultado.

Exemplo de uso

Com a solução atualizada, o processo de filtragem funcionará conforme o esperado:

var users = [{
  name: 'John',
  email: '[email protected]',
  age: 25,
  address: 'USA'
}, {
  name: 'Tom',
  email: '[email protected]',
  age: 35,
  address: 'England'
}, {
  name: 'Mark',
  email: '[email protected]',
  age: 28,
  address: 'England'
}];

var filter = {
  address: 'England',
  name: 'Mark'
};

var filteredUsers = filterUsers(users, filter);

console.log(filteredUsers); // Output: [{ name: 'Mark', email: '[email protected]', age: 28, address: 'England' }]

Esta solução resolve o problema em que várias condições de filtro não eram sendo aplicado corretamente, garantindo que a matriz filtrada resultante reflita com precisão os critérios especificados.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3