基于两个属性重新分组数组元素



我有一个像这样的数组:

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)

相关内容

  • 没有找到相关文章

最新更新