簡體   English   中英

JavaScript:比較兩個 Arrays 並替換對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM