首页 > 解决方案 > JavaScript:为每个具有冗余父属性的嵌套项创建一个新数组项

问题描述

我正在寻找转换这样的数据集

[  
   {  
      "suburb":"Collingwood",
      "couples":[  
         {  
            "husband":"Adam",
            "wife":"Brittany"
         },
         {  
            "husband":"Dave",
            "wife":"Carla"
         }
      ]
   },
   {  
      "suburb":"CBD",
      "couples":[  
         {  
            "husband":"Paul",
            "wife":"Christine"
         },
         {  
            "husband":"Mike",
            "wife":"Laura"
         }
      ]
   }
]

像这样的数据集

[  
   {  
      "suburb":"Collingwood",
      "husband":"Adam",
      "wife":"Brittany"
   },
   {  
      "suburb":"Collingwood",
      "husband":"Dave",
      "wife":"Carla"
   },
   {  
      "suburb":"CBD",
      "husband":"Paul",
      "wife":"Christine"
   },
   {  
      "suburb":"CBD",
      "husband":"Mike",
      "wife":"Laura"
   }
]

是否有下划线功能可以执行此类操作,或者我需要循环并手动执行。目标是显示按妻子姓名排序和分组的最终列表

标签: javascriptjqueryunderscore.js

解决方案


您可以reduce将原始数组转换为具有所需数据格式的新数组:

var data = [{
    "suburb": "Collingwood",
    "couples": [{
        "husband": "Adam",
        "wife": "Brittany"
      },
      {
        "husband": "Dave",
        "wife": "Carla"
      }
    ]
  },
  {
    "suburb": "CBD",
    "couples": [{
        "husband": "Paul",
        "wife": "Christine"
      },
      {
        "husband": "Mike",
        "wife": "Laura"
      }
    ]
  }
];

var res = data.reduce((acc, curr) => {
  // expand each couple to a new object and push all results to accumulator array
  acc.push(...curr.couples.map(c => Object.assign({suburb: curr.suburb}, c)));
  return acc;
}, []);

console.log(res);


推荐阅读