当前位置:首页 > JavaScript

js实现根据pid实现分组

2026-04-07 06:29:55JavaScript

使用 reduce 方法分组

通过数组的 reduce 方法可以高效地根据 pid 进行分组。初始化一个空对象作为累加器,遍历数组时将当前项的 pid 作为键,将相同 pid 的项合并到同一组。

js实现根据pid实现分组

const groupByPid = (data) => {
  return data.reduce((acc, item) => {
    const pid = item.pid;
    if (!acc[pid]) {
      acc[pid] = [];
    }
    acc[pid].push(item);
    return acc;
  }, {});
};

// 示例数据
const data = [
  { id: 1, pid: 'A', name: 'Item 1' },
  { id: 2, pid: 'B', name: 'Item 2' },
  { id: 3, pid: 'A', name: 'Item 3' }
];

console.log(groupByPid(data));
// 输出: { A: [{...}, {...}], B: [{...}] }

使用 forEach 方法分组

通过 forEach 遍历数组,动态构建以 pid 为键的分组对象。逻辑与 reduce 类似,但代码风格更直观。

js实现根据pid实现分组

const groupByPid = (data) => {
  const result = {};
  data.forEach(item => {
    const pid = item.pid;
    if (!result[pid]) {
      result[pid] = [];
    }
    result[pid].push(item);
  });
  return result;
};

使用 Map 数据结构分组

如果需要保留 pid 的顺序或处理非字符串键,可以使用 Map 对象。Map 的键可以是任意类型,适合复杂场景。

const groupByPid = (data) => {
  const map = new Map();
  data.forEach(item => {
    const pid = item.pid;
    if (!map.has(pid)) {
      map.set(pid, []);
    }
    map.get(pid).push(item);
  });
  return Object.fromEntries(map); // 转换为普通对象
};

分组后转换为数组格式

若需要将分组结果转换为数组形式(如 [{ pid: 'A', items: [...] }]),可在分组后通过 Object.entries 处理。

const groupByPidToArray = (data) => {
  const grouped = data.reduce((acc, item) => {
    const pid = item.pid;
    if (!acc[pid]) acc[pid] = [];
    acc[pid].push(item);
    return acc;
  }, {});

  return Object.entries(grouped).map(([pid, items]) => ({ pid, items }));
};

注意事项

  • 数据类型一致性:确保 pid 字段的值类型一致(如均为字符串或数字),避免因类型差异导致分组错误。
  • 空值处理:若 pid 可能为 nullundefined,需在代码中添加判空逻辑。
  • 性能考量:对于大数据量,reduceforEach 性能接近,但 Map 可能略慢于普通对象。

标签: 根据js
分享给朋友:

相关文章

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClipb…

js实现列表

js实现列表

使用 JavaScript 实现列表 JavaScript 提供了多种方式来实现列表功能,包括数组操作、DOM 元素动态生成等。以下是几种常见的实现方法: 使用数组存储列表数据 数组是 JavaSc…

js防抖和节流实现

js防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounce…

js实现延迟

js实现延迟

实现延迟的方法 在JavaScript中,实现延迟操作有多种方式,以下是几种常见的方法: 使用setTimeout函数 setTimeout是JavaScript中最常用的延迟执行方法。它接受一个回…

js实现瀑布流

js实现瀑布流

实现瀑布流布局 瀑布流布局是一种常见的网页布局方式,常用于图片展示、商品列表等场景。以下是使用 JavaScript 实现瀑布流布局的几种方法。 纯 JavaScript 实现 通过计算元素的位置和…

js实现百叶窗

js实现百叶窗

使用CSS和JavaScript实现百叶窗效果 通过CSS动画和JavaScript事件监听可以实现百叶窗效果。核心思路是将内容区域分割为多个条状元素,通过控制它们的展开/折叠状态来模拟百叶窗。…