Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将具有数组值的对象转换为另一个对象数组_Javascript_Arrays_Ecmascript 6_Reduce - Fatal编程技术网

Javascript 将具有数组值的对象转换为另一个对象数组

Javascript 将具有数组值的对象转换为另一个对象数组,javascript,arrays,ecmascript-6,reduce,Javascript,Arrays,Ecmascript 6,Reduce,我有这样的目标: { "John":[ { "address":"xxx1", "city":"yyy1" }, { "address":"xxx2", "city":"yyy

我有这样的目标:


{
    "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
数组.reduce,同样的事情也可以以某种方式完成。你能帮助我吗?我看了JS(ES6):基于对象属性减少数组,但我无法理解

const modifiedData = Object.entries(data).reduce(function (acc, [key,value]) {
      const personName = key;
      return [
        ...acc,
        {
          Agent: personName ,
          adress: value.adress

        },
      ];
    }, []);

如果要使用
Array.prototype.reduce
,可以执行以下操作:

[
{
    "name":"John",
    "address":"xxx1",
    "city":"yyy1"
},
{
    "name":"John",
    "address":"xxx2",
    "city":"yyy2"
},
{
    "name":"Doe",
    "address":"aaaa1",
    "city":"aaaa1"
},
{
    "name":"Smith",
    "address":"bbb1",
    "city":"bbb1"
}
]
const输入={
“约翰”:[{
“地址”:“xxx1”,
“城市”:“yyy1”
},
{
“地址”:“xxx2”,
“城市”:“yyy2”
}
],
“能源部”:[{
“地址”:“aaaa1”,
“城市”:“aaa1”
}
],
“史密斯”:[{
“地址”:“bbb1”,
“城市”:“bbb1”
}],
}
// 1. 使用Object.keys()
const output1=Object.keys(input.reduce)(acc,person)=>{
输入[person].forEach(项目=>{
acc.push({name:person,…item})
})
返回acc;
}, []);
log('output1:',output1)
// 2. 使用Object.entries()
const output2=Object.entries(input.reduce)(acc[key,value])=>{
value.forEach(项=>{
acc.push({name:key,…item})
});
返回acc;
}, [])

log('output2:',output2)您可以使用

const obj={
约翰:[
{
地址:“xxx1”,
城市:“yyy1”,
},
{
地址:“xxx2”,
城市:“yyyy2”,
},
],
能源部:[
{
地址:“aaaa1”,
城市:“aaa1”,
},
],
史密斯:[
{
地址:“bbb1”,
城市:“bbb1”,
},
],
};
const result=Object.entries(obj).reduce((acc,[key,arr])=>{
const collection=arr.map((a)=>({name:key,…a}));
acc=[…acc,…集合];
返回acc;
}, []);

控制台日志(结果)像这样简单的方法

const data={“John”:[{“address”:“xxx1”,“city”:“yyyy1”},{“address”:“xxx2”,“city”:“yyyy2”}],“Doe”:[{“address”:“aaaaa1”,“city”:“aaa1”}],“Smith”:[{“address”:“bbb1”,“city”:“bbb1”}],};;
const result=Object.entries(data.flatMap)([key,values])=>
map(o=>({name:key,…o}));

控制台日志(结果)
使用
.flatMap()
迭代
对象的结果。entries()
并在回调中使用
.map()
创建具有给定属性+名称的新对象。@Nguyen,你的解决方案也不错,但decpk的解决方案是第一个,它符合我的需要,所以我接受了他的答案。谢谢