如何以角度4访问另一个对象数组中的对象数组

时间:2018-02-07 18:34:52

标签: javascript arrays angular typescript foreach

我有一个api响应返回:

{
"code": 0,
"message": "hierarchy list",
"payload": [

{
  "id": 2,
  "name": "nameParent",
  "code": "WUcw",
  "childsOfPayload": [
    {
      "id": 5,
      "name": "NameChild1",
      "code": "ozyW",
      "status": "Active",
      "childsofChildOfPayload": [
        {
          "id": 8,
          "name": "NameChild2",
          "code": "aitq",
          "order": 30,

        },
 ]}]}]}

我正在尝试在每个子节点中获取不同的对象,ChildOfPayload和childOfChildOfpayload。

首先,我返回了有效负载的不同名称值:

    getAllPayloadName() {
   this.userService.getName().subscribe(
    data => {
    this.values= data;
   }
 );

}

但我必须做些什么才能让每个孩子的名字与不同的父母价值相关联!

我的意思是在这种情况下。

       NameChild1 
       NameChild2 

我试过这个:

manipulateDataa() {
this.values.subscribe(x => { 
x.payload.foreach((y:any) => { 
  y.childs.foreach((z:any) => { 
    console.log( z.name) 
   }) 
  })
 })
}

然后在getAllPayloadName中调用它,但仍然无法正常工作。可能有什么不对?

2 个答案:

答案 0 :(得分:1)

你可以做这样的事情来获得你想要的输出。 Here你可以阅读更多关于我使用的forEach循环的信息。

data = {
"code": 0,
"message": "hierarchy list",
"payload": [

{
  "id": 2,
  "name": "nameParent",
  "code": "WUcw",
  "childsOfPayload": [
    {
      "id": 5,
      "name": "NameChild1",
      "code": "ozyW",
      "status": "Active",
      "childsofChildOfPayload": [
        {
          "id": 8,
          "name": "NameChild2",
          "code": "aitq",
          "order": 30,

        },
 ]}]}]}
 
 names = []
 
function iterator (obj, namesArr){
 	Object.keys(obj).forEach(key => {
  	if(key === "name") {
    	namesArr.push(obj[key])
    } else if(typeof obj[key] === "object") {
    	iterator(obj[key][0], names)
    }
  })
 }
 
 iterator(data.payload[0], names)
 console.log(names)
 

答案 1 :(得分:0)

如果api结果结构是强类型且不会更改,则可以通过此行访问子有效负载名称

    console.log(JSON.stringify(obj.payload[0].childsOfPayload[0].name));
    console.log(JSON.stringify(obj.payload[0].childsOfPayload[0].childsofChildOfPayload[0].name));