#Como transformar este array de objetos?

1 messages · Page 1 of 1 (latest)

buoyant venture
#

const lista = [{ "people": { "person1": { "name": "numero 1", "houses": { "size": "mock", "uri": "mock"} }, "id":"1" }, "person2": { "name": "numero 2", "houses": { "size": "mock", "uri": "mock"} }, "id":"2" }]

#

quisiera devolver

#

{ "persons":[ {"name": "numero 1", "id": "1" } ] }

formal ermine
#

En principio si queres transformar un array de objetos pienso en el metodo map

buoyant venture
#

si

#

pero no se bien como usarlo

#

para este caso

formal ermine
#
const lista = [{
  "people": {
    "person1": {
      "name": "numero 1",
      "houses": { 
      "size": "mock",
      "uri": "mock"}
    },
    "id":"1"
  },
   "person2": {
      "name": "numero 2",
      "houses": { 
      "size": "mock",
      "uri": "mock"}
    },
    "id":"2"
}]

const parsed = {
  persons: lista.map((el) => {
    return {
      name: el.name,
      id: el.id
    }
  })
}

#

creo que ahi estaria bien

brisk ivy
#

Mejor un reduce

#

Le pasas el acc como un objeto vacío

buoyant venture
#

No le llega el name

formal ermine
#

Ah, el objeto es anidado, tiene que entrar a person1 e ir al name, en el 2do igual, habria que convertir eso

buoyant venture
#

Como?

#

iterarlo por afuera con for?

#

sin map?

brisk ivy
#

No puedes usar el map para recorrer el objeto

formal ermine
#

el objeto es anidado, y tiene distintas claves en cada uno

#

el primero tiene person1, el 2do tiene person2

#

tendria que hacer tal vez un for in o algo por el estilo

brisk ivy
#

Podrías usar un for...in y destructurar las keys usando Object.entries

#

Cuando te encuentres en el primer objeto

formal ermine
#
const lista = [{
  "people": {
    "person1": {
      "name": "numero 1",
      "houses": { 
      "size": "mock",
      "uri": "mock"}
    },
    "id":"1"
  },
   "person2": {
      "name": "numero 2",
      "houses": { 
      "size": "mock",
      "uri": "mock"}
    },
    "id":"2"
}]

Realmente esta asi anidado el objeto(?
porque el primer objeto, es
people: {person1}
y el segundo objeto es
person2
Es como si estuviera mal anidado

buoyant venture
#

mmm no me sale

buoyant venture
brisk ivy
#

El id no debería ir dentro del objeto anidado?

formal ermine
brisk ivy
#

Porque como comenta @formal ermine parece estar mal anidado la verdad

buoyant venture
#

{ "persons":[ { "name": "numero 1", "id": "1" }, { "name": "numero 2", "id": "2" } ] }

#

Necesito devolver asi

buoyant venture
buoyant venture
#

@formal ermine asi viene el array

#

y asi deberia quedar 😦

formal ermine
#

Bueno, en ese caso tendrias que verificar si tiene un objeto, adentrarse en el objeto y revisar si tiene la propiedad "person" que seria el objeto en donde estas buscando el id y name, y asi todos los objetos, se vuelve un poco mas complejo el codigo

brisk ivy
#
let filter = [{
  persons:[]
}]


const newArray = lista.map(({people})=>{
  for(let keys in people){
    let person = {
      id:people[keys].id,
      name:people[keys].name
    }

   filter[0].persons.push(person)
  }
})


console.log(filter)

#

y la lista la tienes mal anidada

#
const lista = [{
  "people": {
    "person1": {
      "name": "numero 1",
      "houses": { 
      "size": "mock",
      "uri": "mock"},
      "id":"1"
    },
   "person2": {
      "name": "numero 2",
      "houses": { 
      "size": "mock",
      "uri": "mock"},
      "id":"2"
    },
  },  
}]
#

ya que tenias que people tiene un solo objeto anidado, cuando supongo que querrás que tenga dos

#

y bueno el const newArray no hace falta tampoc

formal ermine
#

Si, pero el "person2" lo tiene fuera de "people", tomando en cuenta de que dijo 2 veces que no esta mal anidada, hay un tema ahi

brisk ivy
#

supongo que ha sido un error, porque no le veo mucha logica

formal ermine
#

ya ya lo estoy haciendo de forma recursiva por si acaso, pero si le sirve a @buoyant venture supongo que no hay problema

#

Mas que nada confio en que 2 veces dijo que esta anidada de esa manera

brisk ivy
#

pues si no lo estas deberia verificar si existe alguna propiedad que es de tipo object y ahi generar la logica

formal ermine
#

exacto

buoyant venture
#

le faltaria la otra persona a ese array 😄

buoyant venture
formal ermine
buoyant venture
#

me confundi perdon

#

const lista = [{ "people": { "person1": { "name": "numero 1", "houses": { "size": "mock", "uri": "mock"}, "id":"1" }, "person2": { "name": "numero 2", "houses": { "size": "mock", "uri": "mock"}, "id":"2" }, }, }]

#

asi es el objeto

brisk ivy
#

a mi me salen los dos

formal ermine
#

Eso ya cambia la cosa, si el objeto es asi entonces deberia ser como dijo @brisk ivy

#

posiblemente tengas mal el objeto, corregilo y volve a probar

brisk ivy
buoyant venture
#

consulta

#

esa linea es ts

#

persons:[]
filter[0].persons.push(person); ?

#

porque vs code me lo marca

#

como ts y estoy con js

formal ermine
#

esa linea no es ts

buoyant venture
#

que raro mi lint

#

ja

brisk ivy
#

no, es una propiedad persons que tiene un array vacio

buoyant venture
#

@brisk ivy como puedo hacer para que cuando retorne me elimine los corchetes de afuera

brisk ivy
#

let filter = {
persons:[]
}

#

filter.persons.push(person)

formal ermine
#

Bueno, voy a dar por cerrado este hilo jajaja

#

Ah, lo creo @buoyant venture podes cerrar el hilo por favor(?

buoyant venture
#

Me olvide algo importante perdon, decir gracias por su tiempo me sirvio mucho y me hizo darme cuenta que me falta mucha practica para mapear respuestas