重新组织数组元素,基于两个属性进行分组
P粉364642019
P粉364642019 2023-09-13 10:33:54
0
1
578

我有一个如下的数组:

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)
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!