搜尋

首頁  >  問答  >  主體

重新組織數組元素,基於兩個屬性進行分組

我有一個如下的陣列:

let array1 = [
{"id":"A", "serial":"C"},
{"id":"A", "serial":"E"},
{"id":"A", "serial":"B"},
{"id":"A", "serial":"B"},
{"id":"B", "serial":"A"},
{"id":"B", "serial":"C"},
{"id":"C", "serial":"B"},
{"id":"C", "serial":"F"}
]

我想按照相同的id-serial對進行重新分組。 {"id":"X", "serial":"Y"} 和 {"id":"Y", "serial":"X"} 應視為相同的對。

預期的結果如下:

let res = [
[{"id":"A", "serial":"C"}],
[{"id":"A", "serial":"E"}],
[{"id":"A", "serial":"B"},{"id":"A", "serial":"B"},{"id":"B", "serial":"A"}],
[{"id":"B", "serial":"C"},{"id":"C", "serial":"B"}],
[{"id":"C", "serial":"F"}]
]

我該如何實現這個?

P粉364642019P粉364642019533 天前666

全部回覆(1)我來回復

  • P粉163465905

    P粉1634659052023-09-14 10:04:41

    無法想到更好的方法來做這個。一種方法是按照唯一鍵進行分組。在這裡,唯一鍵將是A|B,對於兩個組合{"id":"A", "serial":"B"}{"id ":"A", "serial":"B"}

    let array1 = [
    {"id":"A", "serial":"C"},
    {"id":"A", "serial":"E"},
    {"id":"A", "serial":"B"},
    {"id":"A", "serial":"B"},
    {"id":"B", "serial":"A"},
    {"id":"B", "serial":"C"},
    {"id":"C", "serial":"B"},
    {"id":"C", "serial":"F"}
    ]
    
    const res = Object.values(array1.reduce((acc, curr) => {
      const k = [curr.id, curr.serial].sort().join('|');
      (acc[k] ??= []).push(curr);
      return acc;
    }, {}));
    
    
    console.log(res)

    回覆
    0
  • 取消回覆