首页 > 解决方案 > JavaScript:比较两个数组并替换对象

问题描述

我有两个数组,我想根据它们相互比较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

标签: javascriptarrays

解决方案


简单数组map,使用 afind获取匹配的用户名,使用{...}扩展运算符返回合并对象。可能和其他回复一样

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)


推荐阅读