繁体   English   中英

从 JavaScript 中的嵌套数组中获取值

[英]Get values from a nested array in JavaScript

鉴于这个数组,我从 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",

 }
]

我如何获得姓名( person )列表,并使用其他mentioendsleptcancelled

这个:

for (var dinner of result) {
                    
    let diners = dinner.diners.name.person.join(", ")
}

返回一个Uncaught TypeError: dinner.diners.name.person is undefined错误Uncaught TypeError: dinner.diners.name.person is undefined错误。 我想返回类似的东西

Miss Caroline Fox (slept)(mentioned)(cancelled), Lady Lucy Anne FitzGerald (slept)(mentioned)(cancelled) etc.

我附上了我的console.log(result)的截图。

控制台日志

如果我们简化数据,我们会得到类似

{
  "diners": {
    "name": [
      [
        {
          "mentioned": null,
          "slept": "no",
          "cancelled": null,
          "person": "Miss Caroline Fox"
        }
      ],
      ...
  }
}

这里我们看到diners是一个Object ,在name键上保存一个数组。 由于每个diner都是一个对象,在一个额外的数组中,我们还需要以该对象为目标。

要获得欲望输出,请使用类似的东西;

 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是一个二维对象数组。 您可以将其展平,然后通过它进行映射以获取所有名称。

result.forEach(dinner => {
    let diners = dinner.diners.name.flat().map(d => d.person).join("");
    console.log(diners);
})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM