我试图合并两个对象,它们都有相同相似的键,但值不同。我希望它们保留不同的键,但将它们放在匹配的键值中
这是我的第一个obj,
const obj1 = [
{
"p_id": 1,
"name": "Peter",
"status" : "Active"
},
{
"p_id": 2,
"name": "Kane",
"status" : "Active"
},
{
"p_id": 3,
"name": "William",
"status" : "Inactive"
}
]
}
我的第二个目标,
const obj2 = [
{ p_id: 1, type: 'home', no: '+01 234 5678' },
{ p_id: 1, type: 'work', no: '+09 111 2223' },
{ p_id: 2, type: 'home', no: '+12 345 6789' },
]
实际上我做过这样的事情,
obj1.forEach((item) => {
Object.assign(item, {
phone: obj2.find(
(o) => o.p_id === item.p_id
)
});
});
// console.log(obj1) would be
[
{
"p_id": 1,
"name": "Peter",
"status" : "Active",
"phone" : {type: 'home', no: '+01 234 5678'}
},
{
"p_id": 2,
"name": "Kane"
"status" : "Active",
"phone" : {type: 'home', no: '+12 345 6789'}
},
{
"p_id": 3,
"name": "William"
"status" : "Inactive"
"phone" : undefined
}
]
但这不是我想要的。我想要的是最终结果,我需要的是这些阵列之间的比较-最终结果应该是这样的:
const result = [
{
"p_id": 1,
"name": "Peter",
"status" : "Active",
"phone" : [
{type: 'home', no: '+01 234 5678'},
{type: 'work', no: '+09 111 2223'}
]
},
{
"p_id": 2,
"name": "Kane"
"status" : "Active",
"phone" : [
{type: 'home', no: '+12 345 6789'}
]
},
{
"p_id": 3,
"name": "William"
"status" : "Inactive"
"phone" : []
}
]
非常感谢您的帮助,谢谢!
3条答案
按热度按时间dbf7pr2w1#
您可以这样做:
说明:
使用
filter
方法查找中具有相同id的所有对象phoneNumbers
数组。然后使用map
方法,并返回不带id的phone number对象。4xrmg8kj2#
而不是
Array.find
尝试Array.filter
方法。find
将只返回第一个元素,而filter
将返回满足条件的所有元素:rqdpfwrv3#
这里是最好的方法