JavaScript :为每个具有冗余父属性的嵌套项创建一个新的数组项

JavaScript : Create a new array item for every nested item with redundant parent properties

我希望像这样转换数据集

[  
   {  
      "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"
   }
]

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

您可以 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);

const newArray = oldArray.reduce((result, object) => {
  object.couples.forEach(couple => {
    result.push({
      suburb: object.suburb,
      husband: couple.husband,
      wife: couple.wife
    })  
  })
  return result;
}, []);

returns:

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

作为单行(注意其他答案可能更容易read/maintanable):

const result = [].concat(...input.map(entry => entry.couples.map(couple => ({...{suburb: entry.suburb}, ...couple}))));

演示:

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

const result = [].concat(...input.map(entry => entry.couples.map(couple => ({...{suburb: entry.suburb}, ...couple}))));

console.log(result);

您可以使用嵌套的 forEach 循环首先获取郊区,然后获取夫妇并将所有内容推入一个新数组。

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 newData=[];

data.forEach(function(item){
 var couples = item.couples;

 couples.forEach(function(couple){
  newData.push({
   'suburb': item.suburb,
   'husband': couple.husband,
   'wife': couple.wife
   })
 })
})

console.log(newData)