Pesquisa de site

javascript - Filtrar array de objetos com outro array de objetos sem saber quais propriedades estão nos objetos


Eu tenho um array de objetos que eu gostaria de filtrar, mas eu não sei quais propriedades eu tenho nos objetos (nem os dados nem o array de filtro):

myArray = [
   { id: "100", area: "01", country: "AT"},
   { id: "101", area: "02", country: "DE"}, 
   { id: "102", area: "01", country: "DE"},
   { id: "103", area: "03", country: "CH"},
   { id: "104", area: "01", country: "AT"}
]

e meu filtro é:

myFilter = { area: "01", country: "AT" }

Eu gostaria de receber isto de volta:

myArrayFiltered = [
   { id: "100", area: "01", country: "AT"},
   { id: "104", area: "01", country: "AT"}
]

Como eu faria para fazer isso? Só para ficar perfeitamente claro, eu não sei as propriedades que estarei procurando, ou seja, eu não sei quais propriedades myArray ou myFilter terão. Se o filtro contiver uma chave que não está em myArray, eu esperaria um array vazio!

PS: Eu também não sei quantas entradas serão filtradas, ou seja, dependendo do que meus usuários inserirem, eu poderia apenas receber:

myFilter = [ {area: "01"} ]

Resposta #1

myArray.filter((item) => 
 Object.entries(myFilter).every(([key, val]) => item[key] === val))

Resposta #2

var myArray  = 
[
    { id: "100", area: "01", country: "AT"},
    { id: "101", area: "02", country: "DE"}, 
    { id: "102", area: "01", country: "DE"},
    { id: "103", area: "03", country: "CH"},
    { id: "104", area: "01", country: "AT"}
 ]

 var  myFilter = { area: "01", country: "AT" }

    var filteredArray = myArray.filter(function(item) {
        return Object.keys(myFilter).every(function(c) {
            return item[c] === myFilter[c];
        });
    } );
    
    console.log(filteredArray)