簡體   English   中英

根據另一個對象數組鍵對對象數組進行排序

[英]Sort array of objects based on another array of objects key

我有 2 個 arrays 對象

array1 = [
    {
        "name": "B",
        "order": 1
    },
    {
        "name": "C",
        "order": 2
    },
    {
        "name": "D",
        "order": 3
    },
    {
        "name": "B",
        "order": 4
    },
    {
        "name": "A",
        "order": 5
    }
]

array2 = [
    {
        "name": "B",
        "order": 1,
        "id": 3638
    },
    {
        "name": "B",
        "order": 1,
        "id": 3661
    },
    {
        "name": "C",
        "order": 2,
        "id": 3658
    },
    {
        "name": "D",
        "order": 3,
        "id": 3659
    },
    {
        "name": "A",
        "order": 5,
        "id": 3636
    }
]

我需要根據屬性名稱對 array2 進行排序以匹配 array1 的相同順序。 在array2 中有2 個與值B 相等的名稱屬性。這些名稱B 在一起,但我需要數組與array1 的順序完全相同。 在 array1 中,第一個 B 位於索引 0 處,第二個 B 位於索引 3 處。

我沒有運氣就做了這個嘗試。

array2.sort((a, b) => array1.indexOf(a.name) - array1.indexOf(b.name));

let sorted = array2.sort((a, b) => {
        return array1.findIndex(p => p.name=== a.name) - array1.findIndex(p => p.name=== b.name);
      });

你可以試試這個,它會在array2中找到與名稱匹配的第一個元素,按順序從array1 .. 將其從array2中刪除,然后將其添加到sortedArray2

 const array1 = [ { "name": "B", "order": 1 }, { "name": "C", "order": 2 }, { "name": "D", "order": 3 }, { "name": "B", "order": 4 }, { "name": "A", "order": 5 } ] const array2 = [ { "name": "B", "order": 1, "id": 3638 }, { "name": "B", "order": 1, "id": 3661 }, { "name": "C", "order": 2, "id": 3658 }, { "name": "D", "order": 3, "id": 3659 }, { "name": "A", "order": 5, "id": 3636 } ] const sortedArray2 = [] for(const item of array1) { sortedArray2.push( array2.splice( array2.findIndex(elem => elem.name === item.name), 1 ) ) } console.log(sortedArray2)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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