簡體   English   中英

如何映射兩個對象數組,將它們連接起來並有效地添加索引

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM