使用具有相同键的来自不同数组的属性更新数组-javascript [英] Update the array with attributes from different array with same key for both - javascript
问题描述
我有以下假定为大型数据集的数组.
I have the following array which is assumed to be large data set.
let response1 = [
{ userID: '2222', dataOne: [ [Object], [Object] ] },
{
userID: '6666',
dataOne: [ [Object] ],
dataTwo: [ [Object], [Object] ]
},
{
userID: '11111',
dataOne: [ [Object], [Object] ],
dataTwo: [ [Object] ]
},
{ userID: '4586', dataTwo: [ [Object] ] }
];
我有另一个数组是数据库查询的结果(也是一个大数据集)
I have another array which i got as a result of database query (which is also a large data set)
let dbResponse = [{
"attributes": {
"dob": "19890147",
"gender": "M",
"mobilePhone": "1239000000",
"name": "Ketan Hol",
},
"doctorID": "ds45ds",
"userID": "11111"
},
{
"attributes": {
"dob": "19890386",
"gender": "M",
"mobilePhone": "1239000000",
"name": "Sachin",
},
"doctorID": "erjjkrel",
"userID": "6666"
},
{
"attributes": {
"dob": "19890219",
"gender": "M",
"mobilePhone": "1239000000",
"name": "Vishwas",
},
"doctorID": "dfgfdg",
"userID": "2222"
},
{
"attributes": {
"dob": "19890219",
"gender": "M",
"mobilePhone": "1239000000",
"name": "Jis",
},
"doctorID": "dfgfdg",
"userID": "98645"
},
{
"attributes": {
"dob": "19890219",
"gender": "M",
"mobilePhone": "1239000000",
"name": "Brad",
},
"doctorID": "dfgfdg",
"userID": "4586"
},
{
"attributes": {
"dob": "19890219",
"gender": "M",
"mobilePhone": "1239000000",
"name": "Brad",
},
"doctorID": "dfgfdg",
"userID": "4586"
}
];
我需要基于相同的userID将dbResponse中的dob,name之类的属性添加到response1数组. 应该使用诸如dob,dbResponse中的名称之类的属性填充response1数组中的所有userID.我对如何在大型数据集中执行以下操作感到困惑.
I need to add the attributes such as dob, name from dbResponse to response1 array based on same userID. All the userID in response1 array should be populated with attributes like dob, name from dbResponse. I am confused on how to perform the below in large data set.
预期的输出将是这样的:
Expected output will be like this:
response1 = [
{ userID: '2222', dataOne: [ [Object], [Object] ], dob: '19890219', name: 'Vishwas' },
{
userID: '6666',
dataOne: [ [Object] ],
dataTwo: [ [Object], [Object] ],
dob: '19890386',
name: 'Sachin'
},
{
userID: '11111',
dataOne: [ [Object], [Object] ],
dataTwo: [ [Object] ],
dob: '19890147',
name: 'Ketan Hol'
},
{ userID: '4586', dataTwo: [ [Object] ], dob: '19890219', name: 'Brad' }
];
使用es6函数处理大型数据集的最佳方法是什么?我是这些es6函数的新手.任何帮助将不胜感激.
What will be the best way to achieve this using es6 functions for a large data sets? I am new to these es6 functions. Any help would be really appreciated.
推荐答案
方法1
为response1
中的每个userId
迭代dbResponse
,提取对象并将其复制到response1
中.
Approach1
Iterate dbResponse
for every userId
in response1
, extract the object and copy the object in response1
.
由于两者都是大型数组,因此您将不得不多次迭代dbResponse
.为了优化在dbResponse
数组中查找response1
对应的userID
对象的操作,您可以维护一个映射以减少搜索的复杂性.
As both are large arrays, you will have to iterate dbResponse
a large number of times. To optimize the operation of finding the response1
corresponding userID
object in the dbResponse
array, you could maintain a mapping to reduce the searching complexity.
const result = dbResponse.reduce((acc, obj) => {
const { userID } = obj
acc[userID] = obj;
return acc;
}, {});
const finalResult = response1.reduce((acc, curr) => {
const { userID } = curr
const dbObj = result[userID] || {}
acc.push({
...curr,
...dbObj
})
return acc;
}, []);
最终结果将在finalResult
这篇关于使用具有相同键的来自不同数组的属性更新数组-javascript的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!