[英]How to join with two associative arrays using an ID in JavaScript?
我有兩個 arrays,我需要做的是將它們組合起來並給我結果數組。 但是我已經盡我所能但仍然無法做到,我正在嘗試使用此鏈接上的信息但它仍然沒有給我
const ap_procedures = [
{num_document: "39553466"},
{num_document: "39559282"},
{num_document: "39553466"},
];
const us_users = [
{num_document: "39553466", errors: "lorem ipsun #1"},
{num_document: "39559282", errors: "lorem ipsun #2"},
];
const result = [
{num_document: "39553466", errors: "lorem ipsun #1"},
{num_document: "39559282", errors: "lorem ipsun #2"},
{num_document: "39553466", errors: "lorem ipsun #1"},
];
最簡單的做法是使用reduce
從us_users
數組中生成 object,然后是map
數組中的ap_procedures
:
const ap_procedures = [{num_document:"39553466"},{num_document:"39559282"},{num_document:"39553466"}]; const us_users = [{num_document:"39553466",errors:"lorem ipsun #1"},{num_document:"39559282",errors:"lorem ipsun #2"}]; const obj = us_users.reduce((a, { num_document, errors }) => ({...a, [num_document]: errors }), {}); const result = ap_procedures.map(({ num_document }) => ({ num_document, errors: obj[num_document] })); console.log(result);
.as-console-wrapper { max-height: 100%;important: top; auto; }
直接的方法是遍歷ap_procedures
並為每個項目在us_users
中搜索匹配的項目:
let result = ap_procedures.map(item => {
let key = item.num_document;
return us_users.find(x => x.num_document === key);
});
這有效並且很容易理解。 如果你不熟悉map()
和find()
上面的代碼基本上是這樣做的:
let result = [];
for (let i=0; i<ap_procedures.length; i++) {
let item = ap_procedures[i];
let key = item.num_document;
for (let j=0; j<us_users.length; j++) {
if (us_users[j].num_document === key) {
result.push(us_users[j]);
}
}
}
然而,這具有O(n-ap_procedures) * O(n-us_users)
的時間復雜度。 一種更快的技術是通過您要加入的密鑰構建us_users
項目的地圖/字典,然后改用該 map。 這是假設us_users
是唯一的:
// build the map
let map = {};
us_users.forEach(x => map[x.num_document] = x);
// use the map
let result = ap_procedures.map(item => {
let key = item.num_document;
return map[key];
});
這在O(n-ap_procedures) + O(n-us_users)
中運行。
為什么不使用 hashmap?
const resultObj = {}
eachArray.reduce((accum, el) => ({...accum, [el.num_documento]: el}), resultObj)
然后你可以 map 超過 Object.keys(resultObj) 來制作一個新數組......
注意:這會覆蓋每個副本的最終 object。 您可以解構舊值,但您將覆蓋該 num_documento 的任何先前值。 你也可以解決這個問題......
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.