首页 > 解决方案 > 我想返回在 Javascript 中包含对象数组的对象的一部分

问题描述

我有一个包含对象数组作为子属性的数组。但是,我只想返回部分对象。例如,

我原来的对象是:

var  deptObj= 
{
  "requestId": 0,
  "requestId_string": "0",
  "departmentRequests": [
     {
        "persistenceVersion": 3,
        "department": [
             {
               "persistenceId": 111,         
               "persistenceVersion": 0,
               "persistenceVersion_string": "0",
               "userId": 26,
               "userId_string": "26",
               "requestId": 0,
               "requestId_string": "0",
               "deptStatus": "PENDING",
               "groupName": "Group 1 ",
               "groupID": "15",
               "userName": "user",
               "userFirstname": "user1",
               "userLastname": "User",
               "requestDate": "2020-03-26",
               "activityName": "Decision",
               "countPending": 0 
             }
           ],
        "decision": [],
        "comment": "start",
        "approved": [],
        "docIndex": 0
    }
  ]
}

然后,我想得到对象的一部分。例如,

{
  "requestId": 0,
  "departmentRequests": [
     {
        "department": [
          {
            "requestId": 0,
            "groupID": "15",
            "requestDate": "2020-03-26",
            "deptStatus": "PENDING",
             "userId": "26",
             "countPending": 0
          }
        ],
        "comment": "start",
        "docIndex": 0
    }
  ]
}

我尝试按如下方式创建 JavaScript:

obj = [];

for(var i in deptObj) {  
    for(var j in deptObj[i].department) {  
    var thisObj = {};   
    thisObj.requestDate = deptObj[i].department[j].requestDate; 
    thisObj.userId =  deptObj[i].department[j].userId; 
    thisObj.deptStatus = deptObj[i].department[j].deptStatus ;
    thisObj.activityName = deptObj[i].department[j].activityName;  
    thisObj.countPending = deptObj[i].department[j].countPending; // 
    obj.push(thisObj);            
   }   
}

//return obj;

return  {
  "requestId": deptObj.requestId, 
  "departmentRequests":  obj 
};

我不知道如何在对象中获取子数组。任何帮助将不胜感激..提前致谢。

标签: javascriptarrays

解决方案


您可以使用它Array.map来遍历对象中的每个数组并提取所需的数据:

var deptObj = {
  "requestId": 0,
  "requestId_string": "0",
  "departmentRequests": [{
    "persistenceVersion": 3,
    "department": [{
      "persistenceId": 111,
      "persistenceVersion": 0,
      "persistenceVersion_string": "0",
      "userId": 26,
      "userId_string": "26",
      "requestId": 0,
      "requestId_string": "0",
      "deptStatus": "PENDING",
      "groupName": "Group 1 ",
      "groupID": "15",
      "userName": "user",
      "userFirstname": "user1",
      "userLastname": "User",
      "requestDate": "2020-03-26",
      "activityName": "Decision",
      "countPending": 0
    }],
    "decision": [],
    "comment": "start",
    "approved": [],
    "docIndex": 0
  }]
}

// get department requests
const reqs = deptObj.departmentRequests.map(function(dr) {
  return {
    "comment": dr.comment,
    "docIndex": dr.docIndex,
    "department": dr.department.map(function(d) {
      return {
        "requestId": d.requestId,
        "groupID": d.groupID,
        "requestDate": d.requestDate,
        "deptStatus": d.deptStatus,
        "userId": d.userId,
        "countPending": d.countPending
      };
    })
  };
});

const res = {
  "requestId": deptObj.requestId,
  "departmentRequests": reqs
};

console.log(res);


推荐阅读