sup*_*oda 2 javascript arrays object node.js
我正在尝试合并两个具有相同相似键但不同值的对象。我希望他们保留不同的键,但将它们放在匹配的键值中
\n这是我的第一个对象,
\nconst obj1 = [\n {\n "p_id": 1,\n "name": "Peter",\n "status" : "Active"\n },\n {\n "p_id": 2,\n "name": "Kane",\n "status" : "Active"\n },\n {\n "p_id": 3,\n "name": "William",\n "status" : "Inactive"\n }\n]\n\n\n}\nRun Code Online (Sandbox Code Playgroud)\n我的第二个目标,
\nconst obj2 = [\n { p_id: 1, type: 'home', no: '+01 234 5678' },\n { p_id: 1, type: 'work', no: '+09 111 2223' },\n { p_id: 2, type: 'home', no: '+12 345 6789' },\n]\nRun Code Online (Sandbox Code Playgroud)\n事实上我做了这样的事情
\n obj1.forEach((item) => {\n Object.assign(item, {\n phone: obj2.find(\n (o) => o.p_id === item.p_id\n )\n });\n });\n// console.log(obj1) would be\n\n[\n {\n "p_id": 1,\n "name": "Peter",\n "status" : "Active",\n "phone" : {type: 'home', no: '+01 234 5678'} \n },\n {\n "p_id": 2,\n "name": "Kane"\n "status" : "Active",\n "phone" : {type: 'home', no: '+12 345 6789'} \n },\n {\n "p_id": 3,\n "name": "William"\n "status" : "Inactive"\n "phone" : undefined\n }\n\n]\n\nRun Code Online (Sandbox Code Playgroud)\n但这不是我想要的。我想要的是最终结果,我需要的是这些数组 \xe2\x80\x93 之间的比较,最终结果应该是这样的:
\nconst result = [\n {\n "p_id": 1,\n "name": "Peter",\n "status" : "Active",\n "phone" : [\n {type: 'home', no: '+01 234 5678'},\n {type: 'work', no: '+09 111 2223'} \n ]\n },\n {\n "p_id": 2,\n "name": "Kane"\n "status" : "Active",\n "phone" : [\n {type: 'home', no: '+12 345 6789'} \n ]\n },\n {\n "p_id": 3,\n "name": "William"\n "status" : "Inactive"\n "phone" : []\n }\n\n]\n\nRun Code Online (Sandbox Code Playgroud)\n非常感谢您的帮助,\n谢谢!
\n你可以这样做:
const users = [
{
p_id: 1,
name: "Peter",
status: "Active",
},
{
p_id: 2,
name: "Kane",
status: "Active",
},
{
p_id: 3,
name: "William",
status: "Inactive",
},
];
const phoneNumbers = [
{ 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" },
];
const mergeArrays = (arr1, arr2) => {
return arr1.map((obj) => {
const numbers = arr2.filter((nums) => nums["p_id"] === obj["p_id"]);
if (!numbers.length) {
obj.phone = numbers;
return obj;
}
obj.phone = numbers.map((num) => ({ type: num.type, no: num.no }));
return obj;
});
};
const result = mergeArrays(users, phoneNumbers);
console.log(result);Run Code Online (Sandbox Code Playgroud)
解释:
使用该filter方法查找phoneNumbers数组中具有相同 id 的所有对象。map然后在匹配的电话号码上使用该方法循环并返回不带 id 的电话号码对象。
| 归档时间: |
|
| 查看次数: |
5831 次 |
| 最近记录: |