我有一个像这样的数组:
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"}]
]
我怎样才能做到这一点?
想不出比这更好的方法了。一种方法是按唯一键进行分组。这里{"id":"A", "serial":"B"}
和{"id":"A", "serial":"B"}
的唯一键是A|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)