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

124
Visualizações
Objeto de mapa de JavaScript y objeto de filtro para objetos anidados

Escribí estas dos funciones que mapean y filtran las propiedades de los objetos planos:

 var mapObject = (obj, f, ctx) => { ctx = ctx || this; var result = {}; Object.keys(obj).forEach(function(k) { result[k] = f.call(ctx, obj[k], k, obj); }); return result; }; var filterObject = (obj, f, ctx) => { ctx = ctx || this; Object.keys(obj).filter(v => { return (!f.call(ctx, obj[v], v, obj)) }).forEach(v => { delete obj[v]; }) return obj; }

Estas dos funciones pueden asignar propiedades "planas" (es decir, objetos no anidados) de un objeto o pueden filtrar propiedades de objetos no anidados de esta manera:

 var mapObject = (obj, f, ctx) => { ctx = ctx || this; var result = {}; Object.keys(obj).forEach(function(k) { result[k] = f.call(ctx, obj[k], k, obj); }); return result; }; var filterObject = (obj, f, ctx) => { ctx = ctx || this; Object.keys(obj).filter(v => { return (!f.call(ctx, obj[v], v, obj)) }).forEach(v => { delete obj[v]; }) return obj; } console.log(mapObject({ name: "james", surname: "joyce" }, (v, k) => v.toUpperCase())) console.log(filterObject({ name: "james", surname: "joyce" }, (v, k) => k != "name")) console.log(mapObject(filterObject({ name: "james", surname: "joyce" }, (v, k) => k != "name"), (v, k) => v.toUpperCase()))

¿Cómo aplicar esto de manera eficiente a objetos anidados, es decir, objetos que tienen propiedades de objetos?

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

0

Creo que una forma más eficiente de aplicar esto a objetos anidados es la recursividad, como ejemplo:

 const mapObject = (obj, f, ctx) => { ctx = ctx || this; var result = {}; Object.keys(obj).forEach(function(k) { if (typeof obj[k] === 'object' && obj[k] !== null) { result[k] = mapObject(obj[k], f, ctx) } else { result[k] = f.call(ctx, obj[k], k, obj); } }); return result; }; console.log(mapObject({ name: "james", surname: "joyce", obj: { objName: "hi" } }, (v, k) => v.toUpperCase())) const filterObject = (obj, f, ctx) => { ctx = ctx || this; Object.keys(obj).filter(v => { if (typeof obj[v] === 'object' && obj[v] !== null) { filterObject(obj[v], f, ctx) } else { return (!f.call(ctx, obj[v], v, obj)) } }).forEach(v => { delete obj[v]; }) return obj; } console.log(filterObject({ name: "james", surname: "joyce", obj : { name: "objName", surname: "objSurname", } }, (v, k) => k != "name"))

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