我在Typescript中處理這個問題,我已經糾結了一段時間了,希望StackOverflow的好心網友能幫幫我:)
給定兩個陣列結構:
var localUsers = [{
firstName: "Joe",
lastName: "Bloggs",
id: "44c021ab-be92-409b-99ad-4c3fe61d894a"
}, {
firstName: "Pete",
lastName: "Doe",
id: "017b4dab-d58b-475e-ab31-6363d9de25c0"
}, {
firstName: "Andy",
lastName: "NotRemote",
id: "2233e4cb-d324-463d-9a42-24b1b4cd3e11"
}]
//Above array is used for a database lookup
var remoteUsers = [{
id: "44c021ab-be92-409b-99ad-4c3fe61d894a",
timestamp: "2017-07-01T12:00:00.000"
}, {
id: "017b4dab-d58b-475e-ab31-6363d9de25c0",
timestamp: "2017-07-01T13:30:00.000"
}]
我想通過id鍵來合并這些陣列,remoteUsers中的所有鍵在localUsers中都會有一個匹配,但相反的情況并不總是如此。這應該會得到一個類似于以下的輸出:
var AllUsers = [{
firstName: "Joe"。
lastName: "Bloggs",
id: "44c021ab-be92-409b-99ad-4c3fe61d894a",
timestamp: "2017-07-01T12:00:00.000"
}, {
firstName: "Pete",
lastName: "Doe",
id: "017b4dab-d58b-475e-ab31-6363d9de25c0",
timestamp: "2017-07-01T13:30:00.000"
}, {
firstName: "Andy",
lastName: "NotRemote",
id: "2233e4cb-d324-463d-9a42-24b1b4cd3e11",
timestamp: null。
}]
我暫時沒有機會使用underscore或lodash等庫。
謝謝您抽出時間來幫助我們!
uj5u.com熱心網友回復:
用map函式合并它們
let localUsers = [{ firstName: "Joe", lastName: "Bloggs", id: "44c021ab-be92-409b-99ad-4c3fe61d894a"/span> }, { firstName: "Pete", lastName: "Doe", id: "017b4dab-d58b-475e-ab31-6363d9de25c0"/span> }, { firstName: "Andy", lastName: "NotRemote", id: "2233e4cb-d324-463d-9a42-24b1b4cd3e11" }]
let remoteUsers = [{ id: "44c021ab-be92-409b-99ad-4c3fe61d894a", timestamp: "2017-07-01T12:00:00.000" }, { id: "017b4dab-d58b-475e-ab31-6363d9de25c0", timestamp: "2017-07-01T13:30:00.000" }]
localUsers = localUsers.map(span class="hljs-params">itm => Object. assign(itm, {timestamp: remoteUsers. find(ru => ru。 id == itm.id)? .timestamp})
console.log(localUsers)
<iframe name="sif1" sandbox="allow-forms allow-modals allow-scripts" class="snippet-box-edit snippet-box-result" frameborder="0"></iframe>
uj5u.com熱心網友回復:
這是我很快想出來的東西,沒有經過優化,但可以完成作業。希望這有幫助。Saeed的回答看起來更好。
function containsID(id, list) {
var i;
for (i = 0; i < list.length; i ) {
if (list[i].id == id) {
return list[i];
}
}
return false;
}
function mergeUsers(local, remote){
var AllUsers = []
for (const userof local) {
var isContainsID = containsID(user.id, remote)。
allUsers.push({
firstName: user.firstName,
lastName: user.lastName,
id: user.id。
timestamp: isContainsID.id || null.
});
}
return allUsers;
}
uj5u.com熱心網友回復:
你可以做到:
const localUsers = [{ firstName: "Joe", lastName: "Bloggs", id: "44c021ab-be92-409b-99ad-4c3fe61d894a"/span> }, { firstName: "Pete", lastName: "Doe", id: "017b4dab-d58b-475e-ab31-6363d9de25c0"/span> }, { firstName: "Andy", lastName: "NotRemote", id: "2233e4cb-d324-463d-9a42-24b1b4cd3e11" }]
const remoteUsers = [{ id: "44c021ab-be92-409b-99ad-4c3fe61d894a", timestamp: "2017-07-01T12:00:00.000"/span> }, { id: "017b4dab-d58b-475e-ab31-6363d9de25c0", timestamp: "2017-07-01T13:30:00.000" }]
const removeUsersObject = remoteUsers. reduce((a, c) =>(a[c.id]=c, a), {})
const result = localUsers.map(u => ({.
...u,
timestamp: null。
...removeUsersObject[u.id]。
}))
console.log(result)
<iframe name="sif2" sandbox="allow-forms allow-modals allow-scripts" class="snippet-box-edit snippet-box-result" frameborder="0"></iframe>
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/306923.html
標籤:
上一篇:如何在陣列和物件的嵌套但固定的結構中訪問一個特定的屬性
下一篇:如何從一個字串中獲取某些東西
