首页 > 解决方案 > 将一个对象的属性包装到另一个对象 - JavaScript

问题描述

我可以知道是否使用reduce我可以实现以下属性,其中activatedItems和的属性quarterItems包含在一个对象中,即modules.

{
  "isExternalVisitor": false,
  "modules": [
    {
      "moduleId": "e569da0e-44e6-4f75-96c4-bdd888678abd",
      "code": "NEWQ2/SITENAME/2021-Q3-1",
      "siteId": "10babdbe-5346-43e8-932a-4c7ae54dcb1b",
      "activatedId": "2e03c658-3bbd-4332-bb1b-14fe56c7e753"
    },
    {
      "moduleId": "588905b4-2c1d-49bf-a71f-84210405bc94",
      "code": "NEWQ1/SITENAME/2021-Q1-2",
      "siteId": "10babdbe-5346-43e8-932a-4c7ae54dcb1b",
      "activatedId": "6c1691d2-7c37-4888-a446-9219fa9b9014"
    }
  ],
  "activatedItems": [
    {
      "activatedId": "2e03c658-3bbd-4332-bb1b-14fe56c7e753",
      "stQuarterId": "b36d7e23-15e5-4f97-b52e-65757de4b264"
    },
    {
      "activatedId": "6c1691d2-7c37-4888-a446-9219fa9b9014",
      "stQuarterId": "01000f98-6470-440a-a833-95b199ab1f7a"
    }
  ],
  "quarterItems": [
    {
      "id": "b36d7e23-15e5-4f97-b52e-65757de4b264",
      "checklistId": "8b479656-8cde-4bff-9c51-d5eca369bc76",
      "fullName": "dsad",
      "year": "2021-01-01T00:00:00",
      "quarter": "2021-Q3",
      "versions": 1
    },
    {
      "id": "01000f98-6470-440a-a833-95b199ab1f7a",
      "checklistId": "039f2584-1ca5-4ee3-b46f-cdf1887af7f6",
      "fullName": "NEWQ1",
      "year": "2021-01-01T00:00:00",
      "quarter": "2021-Q1",
      "versions": 2
    }
  ]
}

这是只有一个对象获得所有数据的预期结果。

{
  "isExternalVisitor": false,
  "modules": [
    {
      "moduleId": "e569da0e-44e6-4f75-96c4-bdd888678abd",
      "code": "NEWQ2/SITENAME/2021-Q3-1",
      "siteId": "10babdbe-5346-43e8-932a-4c7ae54dcb1b",
      "activatedId": "2e03c658-3bbd-4332-bb1b-14fe56c7e753",
      "stQuarterId": "b36d7e23-15e5-4f97-b52e-65757de4b264",
      "checklistId": "8b479656-8cde-4bff-9c51-d5eca369bc76",
      "fullName": "dsad",
      "year": "2021-01-01T00:00:00",
      "quarter": "2021-Q3",
      "versions": 1
    },
    {
      "moduleId": "588905b4-2c1d-49bf-a71f-84210405bc94",
      "code": "NEWQ1/SITENAME/2021-Q1-2",
      "siteId": "10babdbe-5346-43e8-932a-4c7ae54dcb1b",
      "activatedId": "6c1691d2-7c37-4888-a446-9219fa9b9014",
      "stQuarterId": "01000f98-6470-440a-a833-95b199ab1f7a",
      "checklistId": "039f2584-1ca5-4ee3-b46f-cdf1887af7f6",
      "fullName": "NEWQ1",
      "year": "2021-01-01T00:00:00",
      "quarter": "2021-Q1",
      "versions": 2
    }
  ]
}

我尝试了以下并能够将它们合并到一个数组中,但是,最终结果与上面不同。您的帮助将不胜感激。

let modules = arr.modules;
let activatedItems = arr.activatedItems;
let quarterItems = arr.quarterItems;
let finalArr = [];

modules.forEach(module => {
    activatedItems.forEach(item =>{
        if(item.activatedId == module.activatedId)
        {
           quarterItems.forEach(quaItem => {
              if(quaItem.id == item.stQuarterId){
                 finalArr.push(module);
                 finalArr.push(item);
                 finalArr.push(quaItem);
              }
           }) 
        }
    })
})

标签: javascript

解决方案


看来您只是在索引上加入数组。如果是这样的话,一个简单的map就可以了!只需映射modules并使用index映射回调函数从其他数组中获取相应的对象。

const obj={isExternalVisitor:!1,modules:[{moduleId:"e569da0e-44e6-4f75-96c4-bdd888678abd",code:"NEWQ2/SITENAME/2021-Q3-1",siteId:"10babdbe-5346-43e8-932a-4c7ae54dcb1b",activatedId:"2e03c658-3bbd-4332-bb1b-14fe56c7e753"},{moduleId:"588905b4-2c1d-49bf-a71f-84210405bc94",code:"NEWQ1/SITENAME/2021-Q1-2",siteId:"10babdbe-5346-43e8-932a-4c7ae54dcb1b",activatedId:"6c1691d2-7c37-4888-a446-9219fa9b9014"}],activatedItems:[{activatedId:"2e03c658-3bbd-4332-bb1b-14fe56c7e753",stQuarterId:"b36d7e23-15e5-4f97-b52e-65757de4b264"},{activatedId:"6c1691d2-7c37-4888-a446-9219fa9b9014",stQuarterId:"01000f98-6470-440a-a833-95b199ab1f7a"}],quarterItems:[{id:"b36d7e23-15e5-4f97-b52e-65757de4b264",checklistId:"8b479656-8cde-4bff-9c51-d5eca369bc76",fullName:"dsad",year:"2021-01-01T00:00:00",quarter:"2021-Q3",versions:1},{id:"01000f98-6470-440a-a833-95b199ab1f7a",checklistId:"039f2584-1ca5-4ee3-b46f-cdf1887af7f6",fullName:"NEWQ1",year:"2021-01-01T00:00:00",quarter:"2021-Q1",versions:2}]};

const result = {
  isExternalId: obj.isExternalId
};

result.modules = obj.modules.map((el, i) => ({
  ...el,
  ...obj.activatedItems[i],
  ...obj.quarterItems[i]
}));

console.log(result);


推荐阅读