在javascript中的对象数组中合并具有相同键的对象
我有一个如下所示的对象数组。如果数组中有具有相同键值的对象,那么生成的数组应该包含ES5版本中这两个对象的组合在javascript中的对象数组中合并具有相同键的对象,javascript,arrays,javascript-objects,ecmascript-5,Javascript,Arrays,Javascript Objects,Ecmascript 5,我有一个如下所示的对象数组。如果数组中有具有相同键值的对象,那么生成的数组应该包含ES5版本中这两个对象的组合 var arr = [ { "abc": [ { "name": "test", "addr": "123", } ] }, { "def": [ {
var arr = [
{
"abc": [
{
"name": "test",
"addr": "123",
}
]
},
{
"def": [
{
"first_name": "test",
"last_name": "test"
}
]
},
{
"def": [
{
"first_name": "test1",
"last_name": "test1"
}
]
}
]
预期输出应为
var arr =[
{
"abc": [
{
"name": "test",
"addr": "123",
}
]
},
{
"def": [
{
"first_name": "test",
"last_name": "test"
},
{
"first_name": "test1",
"last_name": "test1"
}
]
}
]
有谁能帮助我实现这一目标?提前感谢
var arr=[
{
abc:[
{
名称:test,
地址:123,
}
]
},
{
定义:[
{
名字:test,
姓氏:test
}
]
},
{
定义:[
{
名字:test1,
姓氏:test1
}
]
}]
const result=arr.reduceac,curr=>{
const key=Object.keycurr[0]
const found=acc.findi=>i[key]
如果!找到了{
附件:pushcurr
}否则{
已找到[键]=[…已找到[键],…当前[键]]
}
返回acc;
}, []
console.logresult使用对象和数组
var arr=[{
abc:[{
名称:test,
地址:123,
}]
},
{
定义:[{
名字:test,
姓氏:test
}]
},
{
定义:[{
名字:test1,
姓氏:test1
}]
}
]
变量b={}
arr.forEachc=>{
var key=Object.keysc[0]
var value=Object.valuesc[0]
如果!b[key]b[key]=[]
b[键]。按…值
}
//b是结果对象
变量c=[]
Object.keysb.forEachv=>{
设a={};
a[v]=b[v];
c、 普沙
}
//c正在将对象转换为数组
console.logcWelcome到堆栈溢出!请拿着你的徽章!通读全文,尤其是你在这里的最佳选择是做你的研究,对于相关的话题,等等,然后试一试。如果你在做了更多的研究和搜索后陷入困境,无法摆脱困境,请发布一份你的尝试,并明确指出你陷入困境的地方。人们会很乐意提供帮助。请重新打开此问题,因为建议的答案在ES6版本中,我正在寻找ES5版本,因为我的应用程序目前只支持ES5版本。我的应用程序不支持ES6版本的功能。请您在ES5Checkout中翻译它上面的答案。对于ES5版本,出现了一个错误“找不到对象中的函数find”。有任何帮助吗?find是ES5,IE中不支持它,因此您可以使用filter,filter将返回一个数组并使用索引0。如果数组为null或未定义,则无法运行此函数。将find替换为如下所示的过滤器var found=acc.filterfunction i{return i[key];}[0];我的应用程序不支持ES6版本的函数。你能把它翻译成ES5吗?