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)
我希望像这样转换数据集
[
{
"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)