如何解决将具有数组值的对象转换为另一个对象数组
我有这样的对象:
{
"John":[
{
"address":"xxx1","city":"yyy1"
},{
"address":"xxx2","city":"yyy2"
}
],"Doe":[
{
"address":"aaaa1","city":"aaa1"
}
],"Smith":[
{
"address":"bbb1","city":"bbb1"
}
],}
我试图实现的是减少这个对象,使其看起来像这样:
[
{
"name":"John","address":"xxx1","city":"yyy1"
},{
"name":"John","address":"xxx2","city":"yyy2"
},{
"name":"Doe","address":"aaaa1","city":"aaaa1"
},{
"name":"Smith","address":"bbb1","city":"bbb1"
}
]
但我确信使用 ES6 array.reduce
可以以某种方式完成同样的事情。你能帮助我吗?看了一下JS(ES6):Reduce array based on object attribute 但是没弄明白。
const modifiedData = Object.entries(data).reduce(function (acc,[key,value]) {
const personName = key;
return [
...acc,{
Agent: personName,adress: value.adress
},];
},[]);
解决方法
您可以使用 reduce 实现此目的。
const obj = {
John: [
{
address: "xxx1",city: "yyy1",},{
address: "xxx2",city: "yyy2",],Doe: [
{
address: "aaaa1",city: "aaa1",Smith: [
{
address: "bbb1",city: "bbb1",};
const result = Object.entries(obj).reduce((acc,[key,arr]) => {
const collection = arr.map((a) => ({ name: key,...a }));
acc = [...acc,...collection];
return acc;
},[]);
console.log( result );
如果您想使用 Array.prototype.reduce
执行此操作,您可以执行以下操作:
const input = {
"John": [{
"address": "xxx1","city": "yyy1"
},{
"address": "xxx2","city": "yyy2"
}
],"Doe": [{
"address": "aaaa1","city": "aaa1"
}
],"Smith": [{
"address": "bbb1","city": "bbb1"
}],}
// 1. Using Object.keys()
const output1 = Object.keys(input).reduce((acc,person) => {
input[person].forEach(item => {
acc.push({ name: person,...item })
})
return acc;
},[]);
console.log('output1:',output1)
// 2. Using Object.entries()
const output2 = Object.entries(input).reduce((acc,value]) => {
value.forEach(item => {
acc.push({ name: key,...item })
});
return acc;
},[])
console.log('output2:',output2);
像这样的简单方法。
const data = {"John":[{"address":"xxx1","city":"yyy1"},{"address":"xxx2","city":"yyy2"}],"Doe":[{"address":"aaaa1","city":"aaa1"}],"Smith":[{"address":"bbb1","city":"bbb1"}],};;
const result = Object.entries(data).flatMap(([key,values]) =>
values.map(o => ({name: key,...o})));
console.log(result);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。