使用JavaScript嵌套循环解决问题

时间:2020-10-05 19:41:42

标签: javascript

我有两个数组arr1和arr2:

const arr1 = [
  {
    "test_id": 1,
    "type_cd": "C",
    "status_cd": "C"
  },
  {
    "test_id": 2,
    "type_cd": "C",
    "status_cd": "C"
  },
  {
    "test_id": 3,
    "type_cd": "C",
    "status_cd": "C"
  },
  {
    "test_id": 4,
    "type_cd": "C",
    "status_cd": "C"
  },
  {
    "test_id": 5,
    "type_cd": "C",
    "status_cd": "C"
  },
  {
    "test_id": 6,
    "type_cd": "C",
    "status_cd": "C"
  }
];

arr2:

const arr2 = [
  [
    {
      "resume_id": 200278,
      "test_id": 1,
      "resume_type_cd": "O",
      "status": "Approved - Post Pending",
      "resume_status_cd": "APPR"
    },
    {
      "resume_id": 200286,
      "test_id": 1,
      "resume_type_cd": "C",
      "status": "Chief Review",
      "resume_status_cd": "NAPR"
    }
  ],
  [
    {
      "resume_id": 200296,
      "test_id": 2,
      "resume_type_cd": "C",
      "status": "Chief Review",
      "resume_status_cd": "NAPR"
    },
    {
      "resume_id": 200298,
      "test_id": 2,
      "resume_type_cd": "O",
      "status": "Approved - Post Pending",
      "resume_status_cd": "APPR"
    }
  ],
  [],
  [],
  [],
  []
];

我想基于test_id修改arr1以使其具有resume_id,并在arr1 obj中附加status_cd和type_cd,将成为resumeId,resume_type_cd和状态。

这是我尝试过的:

for(let i=0;i<arr1.length;i++){
  let arr =[];
  for(let j=0;j<arr2.length;j++){
    for(let k=0;k<arr2[j].length;k++){
         if(arr1[i].test_id === arr2[j][k].test_id){
      arr1[i].resume_id = arr2[j][k].resume_id;
      arr1[i].type_cd = arr2[j][k].resume_type_cd;
      arr1[i].status_cd = arr2[j][k].status;
    } 
    }
  }
}

当前输出:

[{"test_id":1,"type_cd":"C","status_cd":"Chief Review","resume_id":200286},{"test_id":2,"type_cd":"O","status_cd":"Approved - Post Pending","resume_id":200298},{"test_id":3,"type_cd":"C","status_cd":"C"},{"test_id":4,"type_cd":"C","status_cd":"C"},{"test_id":5,"type_cd":"C","status_cd":"C"},{"test_id":6,"type_cd":"C","status_cd":"C"}]

预期输出: 基本上,我只想考虑test_id存在resume_id的最终数组中的对象。因此,输出数组将仅具有test_id:1和2,其resume_id不是3、4、5和6。

[
      {
        "test_id": 1,
        "resume_id":200278,
        "type_cd": "O",
        "status_cd": "Approved - Post Pending"
      },
        {
        "test_id": 1,
        "resume_id":200286,
        "type_cd": "C",
        "status_cd": "Chief Review"
      },
      {
        "test_id": 2,
        "resume_id": 200296,
        "type_cd": "C",
        "status_cd": "Chief Review"
      },
      {
        "test_id": 2,
        "resume_id": 200298,
        "type_cd": "O",
        "status_cd": "Approved - Post Pending"
      }
    ];

2 个答案:

答案 0 :(得分:0)

可以使用Array.reduceArray.filter

  • 获得结果之前,需要将2d数组arr2变成1d数组,这可以使用Array.reduce完成。

const arr1 = [
  {
    "test_id": 1,
    "type_cd": "C",
    "status_cd": "C"
  },
  {
    "test_id": 2,
    "type_cd": "C",
    "status_cd": "C"
  },
  {
    "test_id": 3,
    "type_cd": "C",
    "status_cd": "C"
  },
  {
    "test_id": 4,
    "type_cd": "C",
    "status_cd": "C"
  },
  {
    "test_id": 5,
    "type_cd": "C",
    "status_cd": "C"
  },
  {
    "test_id": 6,
    "type_cd": "C",
    "status_cd": "C"
  }
];

const arr2 = [
  [
    {
      "resume_id": 200278,
      "test_id": 1,
      "resume_type_cd": "O",
      "status": "Approved - Post Pending",
      "resume_status_cd": "APPR"
    },
    {
      "resume_id": 200286,
      "test_id": 1,
      "resume_type_cd": "C",
      "status": "Chief Review",
      "resume_status_cd": "NAPR"
    }
  ],
  [
    {
      "resume_id": 200296,
      "test_id": 2,
      "resume_type_cd": "C",
      "status": "Chief Review",
      "resume_status_cd": "NAPR"
    },
    {
      "resume_id": 200298,
      "test_id": 2,
      "resume_type_cd": "O",
      "status": "Approved - Post Pending",
      "resume_status_cd": "APPR"
    }
  ],
  [],
  [],
  [],
  []
];

const arr2Modified = arr2.reduce((acc, cur) => {
  if (cur.length > 0) {
    acc.push(...cur);
  };
  return acc;
}, []);

const result = arr1.reduce((acc, cur) => {
  const existedItems = arr2Modified.filter((item) => item.test_id === cur.test_id);
  
  existedItems.forEach((item) => {
    acc.push({
      test_id: cur.test_id,
      resume_id: item.resume_id,
      type_cd: item.resume_type_cd,
      status_cd: item.status
    });
  });
  
  return acc;
}, []);

console.log(result);

答案 1 :(得分:0)

如果要使用循环执行此操作,则可以使用continue statement