Dada esta matriz que obtengo de una solicitud XHR:
[ { "dinnerID": "h1799-05-20a", "date": "20 May 1799", "note": "<note xmlns=\"http://www.tei-c.org/ns/1.0\"/>", "diners": { "name": [ [ { "mentioned": null, "slept": "no", "cancelled": null, "person": "Miss Caroline Fox" } ], [ { "mentioned": null, "slept": "no", "cancelled": null, "person": "Lady Lucy Anne FitzGerald" } ], [ { "mentioned": null, "slept": "no", "cancelled": null, "person": "Dr ??? Drew" } ], [ { "mentioned": null, "slept": "no", "cancelled": null, "person": "Lady Elizabeth Vassall-Fox" } ], [ { "mentioned": null, "slept": "no", "cancelled": null, "person": "Lord Richard Vassall-Fox" } ] ] } } { "dinnerID": "h1799-05-21a", "date": "21 May 1799", } ] ¿Cómo obtengo una lista de los nombres ( person ) y también uso el otro mentioend , slept y cancelled ?
Este:
for (var dinner of result) { let diners = dinner.diners.name.person.join(", ") } devuelve un Uncaught TypeError: dinner.diners.name.person is undefined . Me gustaría devolver algo como
Miss Caroline Fox (slept)(mentioned)(cancelled), Lady Lucy Anne FitzGerald (slept)(mentioned)(cancelled) etc. Adjunto una captura de pantalla de mi console.log(result) .
Si simplificamos los datos, obtendremos algo como
{ "diners": { "name": [ [ { "mentioned": null, "slept": "no", "cancelled": null, "person": "Miss Caroline Fox" } ], ... } } Aquí vemos que diners es un objeto , que contiene una matriz en la clave de name . Dado que cada diner es un objeto, dentro de una matriz adicional, también necesitaremos apuntar a eso.
Para obtener el resultado deseado, use algo como;
const result = {"dinnerID": "h1799-05-20a", "date": "20 May 1799", "note": "<note xmlns=\"http://www.tei-c.org/ns/1.0\"/>", "diners": {"name": [[{"mentioned": null, "slept": "no", "cancelled": null, "person": "Miss Caroline Fox"} ], [{"mentioned": null, "slept": "no", "cancelled": null, "person": "Lady Lucy Anne FitzGerald"} ], [{"mentioned": null, "slept": "no", "cancelled": null, "person": "Dr ??? Drew"} ], [{"mentioned": null, "slept": "no", "cancelled": null, "person": "Lady Elizabeth Vassall-Fox"} ], [{"mentioned": null, "slept": "no", "cancelled": null, "person": "Lord Richard Vassall-Fox"} ] ] } }; const res = result.diners.name.map(diner => { let obj = diner[0]; return `${obj.person} (${obj.slept}) (${obj.mentioned}) (${obj.cancelled})`; }); console.log(res.join(' ')); Miss Caroline Fox (no) (null) (null) Lady Lucy Anne FitzGerald (no) (null) (null) Dr ??? Drew (no) (null) (null) Lady Elizabeth Vassall-Fox (no) (null) (null) Lord Richard Vassall-Fox (no) (null) (null)dinner.diners.name es una matriz bidimensional de objetos. Puede aplanarlo y luego mapearlo para obtener todos los nombres.
result.forEach(dinner => { let diners = dinner.diners.name.flat().map(d => d.person).join(""); console.log(diners); })