![](/img/trans.png)
[英]Comparing two arrays of objects in javascript and replacing with new information
[英]JavaScript: Comparing Two Arrays and Replacing Objects
我有兩個 arrays 我想根據Username
名相互比較並創建一個包含EmployeeName
的新數組
let array1 = [{
OrderID: 30879,
OrderItems: "Sushi",
OrderedBy: "johnd",
},
{
OrderID: 30880,
OrderItems: "Subway",
OrderedBy: "janes",
},
{
OrderID: 30881,
OrderItems: "KFC",
OrderedBy: "alanf",
},
];
let array2 = [{
EmployeeName: "John Doe",
Username: "johnd",
},
{
EmployeeName: "Jane Snow",
Username: "janes",
},
{
EmployeeName: "Alan Fred",
Username: "alanf",
}
]
期望的結果:
array3 = [{
OrderID: 30879,
OrderItems: "Sushi",
OrderedBy: "johnd",
EmployeeName: "John Doe",
},
{
OrderID: 30880,
OrderItems: "Subway",
OrderedBy: "janes",
EmployeeName: "Jane Snow",
},
{
OrderID: 30881,
OrderItems: "KFC",
OrderedBy: "alanf",
EmployeeName: "Alan Fred",
},
]
我已經堅持了一段時間了,我怎樣才能最好地做到這一點?
TIA
您可以制作Map
來存儲有關每個員工的信息,例如每個鍵(即用戶名)的 EmployeeName。 然后您可以在您的第一個數組上使用.map()
並使用OrderBy
鍵從您創建的 map 中獲取相關的員工數據,然后您可以將其傳播到生成的新 object 中:
const array1 = [{ OrderID: 30879, OrderItems: "Sushi", OrderedBy: "johnd", }, { OrderID: 30880, OrderItems: "Subway", OrderedBy: "janes", }, { OrderID: 30881, OrderItems: "KFC", OrderedBy: "alanf", }, ]; const array2 = [{ EmployeeName: "John Doe", Username: "johnd", }, { EmployeeName: "Jane Snow", Username: "janes", }, { EmployeeName: "Alan Fred", Username: "alanf", } ]; const lut = new Map(array2.map(({Username, ...r}) => [Username, r])); const res = array1.map(obj => ({...obj, ...lut.get(obj.OrderedBy)})); console.log(res);
您可以在第一個數組上 map 並為每個項目搜索第二個數組以檢索員工姓名。
const array3 = array1.map(order => ({
...order,
EmployeeName: array2.find(({
Username
}) => Username === order.OrderedBy).EmployeeName
}));
let array1 = [{ OrderID: 30879, OrderItems: "Sushi", OrderedBy: "johnd", }, { OrderID: 30880, OrderItems: "Subway", OrderedBy: "janes", }, { OrderID: 30881, OrderItems: "KFC", OrderedBy: "alanf", }, ]; let array2 = [{ EmployeeName: "John Doe", Username: "johnd", }, { EmployeeName: "Jane Snow", Username: "janes", }, { EmployeeName: "Alan Fred", Username: "alanf", } ]; const array3 = array1.map(order => ({...order, EmployeeName: array2.find(({ Username }) => Username === order.OrderedBy).EmployeeName })); console.log(array3)
簡單數組map
,使用find
獲取匹配的用戶名,使用{...}
擴展運算符返回合並后的 object。 可能和其他回復一樣
const combined = array1.map( obj => {
let e = array2.find(el=>el.Username == obj.OrderedBy).EmployeeName
return {...obj, EmployeeName: e}
})
let array1 = [{ OrderID: 30879, OrderItems: "Sushi", OrderedBy: "johnd" }, { OrderID: 30880, OrderItems: "Subway", OrderedBy: "janes" }, { OrderID: 30881, OrderItems: "KFC", OrderedBy: "alanf" } ]; let array2 = [{ EmployeeName: "John Doe", Username: "johnd" }, { EmployeeName: "Jane Snow", Username: "janes" }, { EmployeeName: "Alan Fred", Username: "alanf" } ]; const combined = array1.map( obj => { let e = array2.find(el=>el.Username == obj.OrderedBy).EmployeeName return {...obj, EmployeeName: e} }) console.log(combined)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.