我有一个如下的数组:
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"}]
]
我该如何实现这个?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
无法想到更好的方法来做这个。一种方法是按照唯一键进行分组。在这里,唯一键将是
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)