[英]How to map two arrays of objects, concatenate them, and add an index efficiently
我有兩個不同的對象數組,需要分別映射到我定義的key:value對。 映射時,應為每個對象分配一個順序索引。 然后,我需要獲取每個映射的數組並將其連接起來。
到目前為止,這是我嘗試過的。 它可以工作,但是我認為可能有更有效或更干凈的方法:
const mapPosts = () => {
let index = 0
const mappedPostsA = postsA.map(post => {
index++
return {
id: index,
provider: 'Wordpress',
post_id: postA.id,
title: postA.title,
body: postA.body_html
}
})
const mappedPostsB = postsB.map(post => {
index++
return {
id: index,
provider: 'Blogspot',
post_id: postB.id,
title: postB.title,
body: postB.description
}
})
const mappedPosts = [...mappedPostsA, ...mappedPostsB])
}
您可以將索引僅按postsA
的長度postsA
,因為您知道postsB
總是postsB
其后。
const mapPosts = (postsA, postsB) => {
return [
...postsA.map((post, index) => ({
id: index,
provider: 'Wordpress',
post_id: post.id,
title: post.title,
body: post.body_html
}))
...postsB.map((product, index) => ({
id: index + postsA.length,
provider: 'Blogspot',
post_id: product.id,
title: product.title,
body: product.description
}))
];
};
因為您在原始問題中使用了擴展語法,所以我使用了擴展語法,可以改用諸如mappedA.concat(mappedB)
類的東西,但這主要是優先考慮的問題。
如果您擔心效率,並且有很多對象,則可能要考慮使用Map而不是普通對象。 地圖是專門為有效處理鍵值對而定制的。 您可能會略微提高性能,或者至少獲得稍微易讀的代碼。
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Map
為了消除代碼重復,我可能會做
const mappedPostsA = postsA.map(post => ({post, provider: 'Wordpress', body: post.body_html}));
const mappedPostsB = postsB.map(post => ({post, provider: 'Blogspot', body: post.description}));
const mappedPosts = [].concat(mappedPostsA, mappedPostsB).map(({post, provider, body}, index) => ({
id: index,
provider,
post_id: post.id,
title: post.title,
body,
}));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.