重新組織數組元素,基於兩個屬性進行分組
P粉364642019
P粉364642019 2023-09-13 10:33:54
0
1
630

我有一個如下的陣列:

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粉364642019
P粉364642019

全部回覆(1)
P粉163465905

無法想到更好的方法來做這個。一種方法是按照唯一鍵進行分組。在這裡,唯一鍵將是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)
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板