js实现根据pid实现分组
实现根据pid分组的方法
使用JavaScript根据pid(父ID)对数据进行分组,可以采用以下方法:
使用reduce方法进行分组
const groupByPid = (data) => {
return data.reduce((acc, item) => {
const pid = item.pid;
if (!acc[pid]) {
acc[pid] = [];
}
acc[pid].push(item);
return acc;
}, {});
};
使用Map对象实现分组
const groupByPidWithMap = (data) => {
const result = new Map();
data.forEach(item => {
const pid = item.pid;
if (!result.has(pid)) {
result.set(pid, []);
}
result.get(pid).push(item);
});
return Object.fromEntries(result);
};
示例数据和使用
const data = [
{ id: 1, pid: 0, name: 'A' },
{ id: 2, pid: 1, name: 'B' },
{ id: 3, pid: 1, name: 'C' },
{ id: 4, pid: 0, name: 'D' },
{ id: 5, pid: 4, name: 'E' }
];
const groupedData = groupByPid(data);
console.log(groupedData);
处理嵌套结构
如果需要构建树形结构而不仅仅是分组,可以使用递归方法:
const buildTree = (items, pid = 0) => {
return items
.filter(item => item.pid === pid)
.map(item => ({
...item,
children: buildTree(items, item.id)
}));
};
const treeData = buildTree(data);
console.log(treeData);
性能优化建议
对于大型数据集,建议使用Map而不是普通对象来提高查找性能。如果需要多次访问分组结果,可以预先构建索引。

注意事项
确保数据中的pid字段存在且有效。处理循环引用时需要额外检查,避免无限递归。根据实际需求选择扁平分组或树形结构。






