Как объединить массив субобъектов внутри объекта в javascript? - PullRequest
2 голосов
/ 21 января 2020

Я хотел бы объединить массив подобъектов внутри объекта в javascript. У меня есть объектный массив внутри объекта: я хотел бы вернуть подмассив отдела в один объектный массив.

var array =
    {
      "departsObjInput": { 
        "departmentRequests": [
          {
            "department": [
              [
                {
                  "groupID": "20",
                  "groupName": "Group20",
                  "requestDate": "2020-01-21",
                  "deptStatus": "PENDING"  
                },
                {
                  "groupID": "21",
                  "groupName": "Group21",
                  "requestDate": "2020-01-21",
                  "deptStatus": "PENDING"  
                },
                {
                  "groupID": "24",              
                  "groupName": "Group24",
                  "requestDate": "2020-01-21",
                  "deptStatus": "PENDING" 
                }
              ],
              [
                {
                  "groupID": "18",
                  "groupName": "Group18",
                  "requestDate": "2020-01-21",
                  "deptStatus": "PENDING"  
                },
                {
                  "groupID": "26",
                  "groupName": "Group26",
                  "requestDate": "2020-01-21",
                  "deptStatus": "PENDING"
                }
              ]
            ] 
          },
          {
            "department": [
              [
                {
                  "groupID": "90",
                  "groupName": "Group90",
                  "requestDate": "2020-01-21",
                  "deptStatus": "PENDING",
                },
                {
                  "groupID": "38",
                  "groupName": "Group38",
                  "requestDate": "2020-01-21",
                  "deptStatus": "PENDING",
                }
              ],
              [
                {
                  "groupID": "37",
                  "groupName": "Group37",
                  "requestDate": "2020-01-21",
                  "deptStatus": "PENDING",
                }
              ]
            ],
          }
        ]
      }
    }

Я хотел бы объединить подмассив отдела как:

  {
  "departsObjInput": { 
    "departmentRequests": [
      {
        "department":  
          [
            {
              "groupID": "20",
              "groupName": "Group20",
              "requestDate": "2020-01-21",
              "deptStatus": "PENDING"  
            },
            {
              "groupID": "21",
              "groupName": "Group21",
              "requestDate": "2020-01-21",
              "deptStatus": "PENDING"  
            },
            {
              "groupID": "24",              
              "groupName": "Group24",
              "requestDate": "2020-01-21",
              "deptStatus": "PENDING" 
            },          
            {
              "groupID": "18",
              "groupName": "Group18",
              "requestDate": "2020-01-21",
              "deptStatus": "PENDING"  
            },
            {
              "groupID": "26",
              "groupName": "Group26",
              "requestDate": "2020-01-21",
              "deptStatus": "PENDING"
            }
          ]

      },
      {
        "department":  
          [
            {
              "groupID": "90",
              "groupName": "Group90",
              "requestDate": "2020-01-21",
              "deptStatus": "PENDING",
            },
            {
              "groupID": "38",
              "groupName": "Group38",
              "requestDate": "2020-01-21",
              "deptStatus": "PENDING",
            },           
            {
              "groupID": "37",
              "groupName": "Group37",
              "requestDate": "2020-01-21",
              "deptStatus": "PENDING",
            }
          ]
         ,
      }
    ]
  }
}

что я пытался:

var deptItem = array.departsObjInput.departmentRequests
var merged = [].concat.apply([], deptItem);
return merged;

Я пробовал другие скрипты, но не мог получить ответ. Пожалуйста, помогите мне найти решение.

Заранее спасибо,

Ответы [ 2 ]

3 голосов
/ 21 января 2020

Вам просто нужно использовать forEach l oop для доступа к каждому массиву department, а затем сделать его одним массивом 1D, используя flat()

array.departsObjInput.departmentRequests.forEach(x => {
  x.department = x.department.flat();
})

var array =
    {
      "departsObjInput": { 
        "departmentRequests": [
          {
            "department": [
              [
                {
                  "groupID": "20",
                  "groupName": "Group20",
                  "requestDate": "2020-01-21",
                  "deptStatus": "PENDING"  
                },
                {
                  "groupID": "21",
                  "groupName": "Group21",
                  "requestDate": "2020-01-21",
                  "deptStatus": "PENDING"  
                },
                {
                  "groupID": "24",              
                  "groupName": "Group24",
                  "requestDate": "2020-01-21",
                  "deptStatus": "PENDING" 
                }
              ],
              [
                {
                  "groupID": "18",
                  "groupName": "Group18",
                  "requestDate": "2020-01-21",
                  "deptStatus": "PENDING"  
                },
                {
                  "groupID": "26",
                  "groupName": "Group26",
                  "requestDate": "2020-01-21",
                  "deptStatus": "PENDING"
                }
              ]
            ] 
          },
          {
            "department": [
              [
                {
                  "groupID": "90",
                  "groupName": "Group90",
                  "requestDate": "2020-01-21",
                  "deptStatus": "PENDING",
                },
                {
                  "groupID": "38",
                  "groupName": "Group38",
                  "requestDate": "2020-01-21",
                  "deptStatus": "PENDING",
                }
              ],
              [
                {
                  "groupID": "37",
                  "groupName": "Group37",
                  "requestDate": "2020-01-21",
                  "deptStatus": "PENDING",
                }
              ]
            ],
          }
        ]
      }
    }
    
array.departsObjInput.departmentRequests.forEach(x => {
  x.department = x.department.flat();
})

console.log(array)
3 голосов
/ 21 января 2020

Массив находится в array.departsObjInput.departmentRequests.department.

И departmentRequests - это массив, его нужно проиндексировать.

array.departsObjInput.departmentRequests[i].department = [].concat(...array.departsObjInput.departmentRequests[i].department);
...