#Como transformar este array de objetos?
1 messages · Page 1 of 1 (latest)
En principio si queres transformar un array de objetos pienso en el metodo map
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
No le llega el name
Ah, el objeto es anidado, tiene que entrar a person1 e ir al name, en el 2do igual, habria que convertir eso
No puedes usar el map para recorrer el objeto
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
Podrías usar un for...in y destructurar las keys usando Object.entries
Cuando te encuentres en el primer objeto
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
mmm no me sale
si esta asi anidado
El id no debería ir dentro del objeto anidado?
Okey, y respondiendo a esto, solo necesitas que persons sea un array del objeto people? o un array de todos los persons que existan en el objeto(?
Porque como comenta @formal ermine parece estar mal anidado la verdad
{ "persons":[ { "name": "numero 1", "id": "1" }, { "name": "numero 2", "id": "2" } ] }
Necesito devolver asi
si el id va dentro perdon me confundi yo
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
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
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
supongo que ha sido un error, porque no le veo mucha logica
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
pues si no lo estas deberia verificar si existe alguna propiedad que es de tipo object y ahi generar la logica
exacto
si person2 esta dentro de people
En el objeto que mandaste no esta dentro de people, esta fuera
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
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
consulta
esa linea es ts
persons:[]
filter[0].persons.push(person); ?
porque vs code me lo marca
como ts y estoy con js
esa linea no es ts
no, es una propiedad persons que tiene un array vacio
@brisk ivy como puedo hacer para que cuando retorne me elimine los corchetes de afuera
Bueno, voy a dar por cerrado este hilo jajaja
Ah, lo creo @buoyant venture podes cerrar el hilo por favor(?
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