我正在做一些事情,我從我無法控制的 2 個不同的 API 中獲取資料,并且我想以最有效的方式組合結果。其中一個陣列持有一些資產,比如說書籍,另一個陣列持有該書籍的交易。這是一個例子:
{
author: {name: 'J.K. Rowling', },
assetName: 'Book1'
}]
const array2 = [
{from: 'John',
to: 'Sarah,
price: 10,
timeStamp: 123,
assetName: 'Book1',
authorName: 'J.K. Rowling'
}]
請注意,要找到給定書籍的相應交易,您需要同時匹配資產名稱和作者名稱 - 您可以擁有多本同一作者的書籍,并且您可以擁有兩本同名但作者不同但作者擁有的書籍只有一本具有給定名稱的書,因此查找資產的相應交易需要兩個欄位匹配并且沒有其他唯一識別符號。天真的方法是遍歷其中一個陣列,并為每個條目檢查第二個陣列以查找事務,但如果陣列很大,執行起來似乎需要很長時間。我想知道你能想到什么更好的解決方案來合并具有不同結構的兩個有效的物件?
uj5u.com熱心網友回復:
好吧,如果author.name assetName形成一個 id,您可以迭代array1一次并創建一個Map鍵author.name assetName為原始物件的值。
然后你也可以迭代array2一次并以任何你想要的方式豐富它。第二次迭代中的所有查找都將很快,因為您將訪問Map而不是在陣列中搜索。
const indexedArray1 = new Map();
array1.forEach(data => indexedArray1.set(data.author.name data.assetName, data);
const enrichedArray2 = array2.map(transaction => {
const relatedBook = indexedArray1.get(transaction.authorName transaction.assetName);
// Merge relatedBook & transaction the way you want here
});
uj5u.com熱心網友回復:
合并陣列時我經常做以下事情
時間復雜度為 O(n)
const array1 = [{
author: {name: 'J.K. Rowling' },
assetName: 'Book1'
}]
const array2 = [{
from: 'John',
to: 'Sarah',
price: 10,
timeStamp: 123,
assetName: 'Book1',
authorName: 'J.K. Rowling'
}]
const array2_map = {}
array2.forEach(e => {
const key = `${e.assetName}:${e.authorName}`
if (!array2_map[key]) array2_map[key] = []
const { from, to, price, timeStamp } = e
array2_map[key].push({
from,
to,
price,
timeStamp
})
})
const merged_array = array1.map(e => ({
...e,
transaction: array2_map[`${e.assetName}:${e.authorName}`] || []
}))
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/459264.html
標籤:javascript 表现
