我知道它已被無數次詢問,我向您保證,我已經閱讀了很多帖子、文章等,并觀看了很多視頻,但似乎沒有任何點擊。
所以我們開始了:
這是 2 個包含每個人的部分資訊的陣列
let arr1 = [{id:00, name:Ben, city:Philadelphia}, {id:01, name:Alice, city:Frankfurt}, {id:02, name:Detlef, city:Vienna}]
let arr2 = [{id:02, age:18}, {id:00, age:39}, {id:01, age:75}]
并且有期望的最終結果:一個包含每個人的姓名、城市和年齡的陣列
let arr3 = [{name:Ben, city:Philadelphia, age:39}, {name:Alice, city:Frankfurt, age:75 }, {name:Detlef, city:Vienna, age:18}]
什么情況?: 兩個陣列都包含物件。每個嵌套物件都有一個 id。該 id 是每個物件陣列中的公共鍵。
你想讓我做什么 ?:我想創建第三個陣列,包括來自兩個陣列的資訊(來自 arr1:name 和 city;來自 arr2:age)。
你試過什么了 ?: 我無法實作任何值得展示的東西。這個最小的示例旨在向您展示我當前情況的一個簡單示例:一方面我有一個位于 LocalStorage 中的陣列,另一方面是一個 API,兩者都包含有關特定物件的一些資訊(比如說人)。我想創建一個陣列,其中將包含有關每個人的所有資訊,以便以后進行操作(DOM 生成等)。
我已經設法將兩個陣列存盤在兩個“本地”陣列中,但問題仍然存在:我不知道如何創建一個陣列,其中專案從兩個單獨的源獲取它們的鍵/值。
謝謝您的幫助 !
uj5u.com熱心網友回復:
您可以使用withreduce上的方法作為初始值,并在內部嘗試使用相同的對應項并從 中破壞物件并將兩個物件與.arrarrayfindididspread operator
let arr1 = [{id:00, name:'Ben', city: 'Philadelphia' }, {id:01, name:'Alice', city:'Frankfurt'}, {id:02, name:'Detlef', city:'Vienna'}]
let arr2 = [{id:02, age:18}, {id:00, age:39}, {id:01, age:75}]
const result = arr1.reduce((acc, { id: id1, ...rest1 }) => {
const { id: id2, ...rest2 } = arr2.find(i => i.id === id1)
acc.push({ ...rest1, ...rest2 })
return acc;
}, [])
console.log(result)
uj5u.com熱心網友回復:
您可以通過各種方式解決它,這里首先我實作了一個dictwith keyas id 以在O(1)迭代時獲取值arr2。
所以整體時間復雜度O(n k)是nlen ofarr1和klen of arr2。
let arr1 = [{id:00, name: "Ben", city: "Philadelphia"}, {id:01, name:"Alice", city:"Frankfurt"}, {id:02, name:"Detlef", city:"Vienna"}];
let arr2 = [{id:02, age:18}, {id:00, age:39}, {id:01, age:75}];
const refMapById = arr1.reduce((refMap, {id, name, city}) => {
refMap[id] = {name, city};
return refMap;
}, {});
const result = arr2.reduce((resultArray, {id, age}) => [...resultArray, { ...refMapById[id],age}], []);
console.log(result);
干杯!
uj5u.com熱心網友回復:
無論如何,從其中一個陣列創建字典是值得的,因為使用.find()inside of.reduce()添加了不必要的嵌套回圈。但不是像建議的那樣減少第二個陣列,您可以將其簡單地.map()放入結果陣列中,如下所示:
let arr1 = [{ id: 00, name: "Ben", city: "Philadelphia" }, { id: 01, name: "Alice", city: "Frankfurt" }, { id: 02, name: "Detlef", city: "Vienna" }];
let arr2 = [{ id: 02, age: 18 }, { id: 00, age: 39 }, { id: 01, age: 75 }];
const groupedById = arr1.reduce((group, person) => {
group[person.id] = person;
return group;
}, {});
const result = arr2.map((personPartFromSecondArray) => {
const personPartFromFirstArray = groupedById[personPartFromSecondArray.id];
if (typeof personPartFromFirstArray !== "undefined") {
return { ...personPartFromFirstArray, ...personPartFromSecondArray }
}
return personPartFromSecondArray;
});
console.log(result);
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/524730.html
上一篇:ValueError:multilabel-indicatorformatisnotsupported,由于錯誤無法制作ROC曲線
