如何将值从数组中的对象添加到另一个数组中的另一个对象?

sas*_*nov 1 javascript

我试图将对象值从一个数组添加到另一个数组中的另一个对象

第一个数组结构是:

var array1 = [
    { email: 'user1@example.com', status: 'offline' },
    { email: 'user2@example.com', status: 'online' },
    { email: 'user3@example.com', status: 'idle' }
]


var array2 = [
    { email: 'user1@example.com', status: '', activeTime: '1hr', logedIn: true, },
    { email: 'user1@example.com', status: '', activeTime: '1hr', logedIn: true, },
    { email: 'user1@example.com', status: '', activeTime: '1hr', logedIn: true, },
    { email: 'user2@example.com', status: '', activeTime: '2hr', logedIn: false, },
    { email: 'user2@example.com', status: '', activeTime: '2hr', logedIn: false, },
    { email: 'user2@example.com', status: '', activeTime: '2hr', logedIn: false, },
    { email: 'user2@example.com', status: '', activeTime: '2hr', logedIn: false, },
    { email: 'user3@example.com', status: '', activeTime: '1.5hr', logedIn: true, },
]
Run Code Online (Sandbox Code Playgroud)

预期结果将是这样的:

var arrayJoined = [
    { email: 'user1@example.com', status: 'offline', activeTime: '1hr', logedIn: true, },
    { email: 'user1@example.com', status: 'offline', activeTime: '1hr', logedIn: true, },
    { email: 'user1@example.com', status: 'offline', activeTime: '1hr', logedIn: true, },
    { email: 'user2@example.com', status: 'online', activeTime: '2hr', logedIn: false, },
    { email: 'user2@example.com', status: 'online', activeTime: '2hr', logedIn: false, },
    { email: 'user2@example.com', status: 'online', activeTime: '2hr', logedIn: false, },
    { email: 'user2@example.com', status: 'online', activeTime: '2hr', logedIn: false, },
    { email: 'user3@example.com', status: 'idle', activeTime: '1.5hr', logedIn: true, },
]
Run Code Online (Sandbox Code Playgroud)

Nat*_*ich 5

您将要映射到第二个数组,并将两个对象合并在一起,其中的电子邮件是相同的。因此,您可以使用Array.map和Object.assign:

function merge(array1, array2) {
  return array2.map(obj => {
    var matchingObj = array1.find(el => el.email === obj.email)
    return Object.assign({}, obj, matchingObj)
  })
}
Run Code Online (Sandbox Code Playgroud)