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

95
Visualizações
Filtrar un objeto por una matriz de claves en Javascript

Quiero devolver un objeto que contenga solo las claves que se pasan a través de una matriz, por ejemplo, tengo una matriz de claves,

 const arr = ['a', 'b', 'c', 'd', 'e']

y un Objeto,

 const obj = { a: { name: 'a', capital: 'A' }, g: { name: 'g', capital: 'G' }, b: { name: 'b', capital: 'B' }, m: { c: { name: 'c', capital: 'C' } }, z: { name: 'z', capital: 'Z' }, n: { e: { name: 'e', capital: 'E' } }, o: { f: { d: { name: 'd', capital: 'D' } } } }

Ahora quiero devolver un Objeto que contenga solo las claves presentes en arr , 'a', 'b', 'c', 'd' and 'e' , por lo que mi objeto resultante será,

 { a: { name: 'a', capital: 'A' }, b: { name: 'b', capital: 'B' }, c: { name: 'c', capital: 'C' }, e: { name: 'e', capital: 'E' }, d: { name: 'd', capital: 'D' } }

Acercarse:

Me acerco como se muestra a continuación, pero no obtengo el resultado deseado,

 function fetchValueByKey(object, key, result) { if(typeof object !== 'object') return result; for(let objKey in object) { if(key.indexOf(objKey) > -1) { result[objKey] = object[objKey]; console.log(result); } else { result[objKey] = fetchValueByKey(object[objKey], key, result); console.log(result) } } } console.log(fetchValueByKey(obj, arr, {}));

Por favor, sugiérame cómo puedo lograr esto.

about 4 years ago · Juan Pablo Isaza
3 Respostas
Responde à pergunta

0

Su código es bueno; solo necesita devolver o generar el resultado después del ciclo. ADEMÁS , no hay necesidad de result[objKey] = ya que ya ha determinado que objKey no está en la lista de claves que está buscando, así que simplemente llame a la función nuevamente para profundizar en el subobjeto.

 const arr = ['a', 'b', 'c', 'd', 'e'] const obj = { a: { name: 'a', capital: 'A' }, g: { name: 'g', capital: 'G' }, b: { name: 'b', capital: 'B' }, m: { c: { name: 'c', capital: 'C' } }, z: { name: 'z', capital: 'Z' }, n: { e: { name: 'e', capital: 'E' } }, o: { f: { d: { name: 'd', capital: 'D' } } } }; function fetchValueByKey(object, key, result) { if(typeof object !== 'object') return result; for(let objKey in object) { if(key.indexOf(objKey) > -1) { result[objKey] = object[objKey]; //console.log(result); } else { fetchValueByKey(object[objKey], key, result); //console.log(result) } } return result; } console.log(fetchValueByKey(obj, arr, {}));

about 4 years ago · Juan Pablo Isaza Relatório

0

Puede obtener entradas planas y filtradas y construir un objeto.

 const getFlatFilteredEntries = object => Object .entries(object) .flatMap(([k, v]) => 'name' in v // or other indicator of leaf object ? keys.includes(k) ? [[k, v]] : [] : getFlatFilteredEntries(v) ), keys = ['a', 'b', 'c', 'd', 'e'], object = { a: { name: 'a', capital: 'A' }, g: { name: 'g', capital: 'G' }, b: { name: 'b', capital: 'B' }, m: { c: { name: 'c', capital: 'C' } }, z: { name: 'z', capital: 'Z' }, n: { e: { name: 'e', capital: 'E' } }, o: { f: { d: { name: 'd', capital: 'D' } } } }, result = Object.fromEntries(getFlatFilteredEntries(object)); console.log(result);
 .as-console-wrapper { max-height: 100% !important; top: 0; }

about 4 years ago · Juan Pablo Isaza Relatório

0

Podemos usar JSON.stringify aquí para iterar sobre cada objeto anidado y podemos verificar si la clave está incluida en la matriz y agregarla en el objeto.

 const obj = { a: { name: 'a', capital: 'A' }, g: { name: 'g', capital: 'G' }, b: { name: 'b', capital: 'B' }, m: { c: { name: 'c', capital: 'C' } }, z: { name: 'z', capital: 'Z' }, n: { e: { name: 'e', capital: 'E' } }, o: { f: { d: { name: 'd', capital: 'D' } } } } const arr = ['a', 'b', 'c', 'd', 'e']; function getObjects(arr, obj) { const a = {}; let str = JSON.stringify(obj, (key, value) => { if(arr.includes(key)) { a[key] = value; return value } return value }); return a; } console.log(getObjects(arr, obj));

Resuelto un problema similar con JSON.stringify es realmente útil cuando se juega con objetos. ¿Cuál es la forma eficiente de clonar superficialmente un objeto usando JavaScript?

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