当前位置:首页 > JavaScript

js实现分组函数

2026-04-07 15:45:29JavaScript

实现分组函数的方法

在JavaScript中,分组函数通常指将数组元素按照特定条件分组,生成一个对象或Map,其中键是分组条件,值是对应的元素数组。以下是几种常见的实现方式:

使用Array.reduce()方法

通过reduce遍历数组,根据分组条件构建结果对象:

js实现分组函数

function groupBy(arr, key) {
  return arr.reduce((acc, item) => {
    const groupKey = typeof key === 'function' ? key(item) : item[key];
    (acc[groupKey] = acc[groupKey] || []).push(item);
    return acc;
  }, {});
}

// 示例用法
const data = [
  { category: 'fruit', name: 'apple' },
  { category: 'vegetable', name: 'carrot' },
  { category: 'fruit', name: 'banana' }
];
console.log(groupBy(data, 'category'));
// 输出: { fruit: [...], vegetable: [...] }

使用Map数据结构

如果需要保持分组键的顺序或键可能是非字符串类型,可以使用Map:

js实现分组函数

function groupByToMap(arr, keyFn) {
  const map = new Map();
  arr.forEach(item => {
    const key = keyFn(item);
    if (!map.has(key)) map.set(key, []);
    map.get(key).push(item);
  });
  return map;
}

// 示例用法
console.log(groupByToMap(data, item => item.category));

按多个条件复合分组

实现多级分组,例如先按category再按subCategory:

function multiGroupBy(arr, keys) {
  return arr.reduce((acc, item) => {
    const keyPath = keys.map(k => item[k]).join('|');
    (acc[keyPath] = acc[keyPath] || []).push(item);
    return acc;
  }, {});
}

性能优化版本

对于大数据量,可优化分组过程:

function optimizedGroupBy(arr, key) {
  const result = Object.create(null);
  for (let i = 0; i < arr.length; i++) {
    const item = arr[i];
    const groupKey = typeof key === 'function' ? key(item) : item[key];
    let group = result[groupKey];
    if (group) {
      group.push(item);
    } else {
      result[groupKey] = [item];
    }
  }
  return result;
}

注意事项

  • 如果分组键可能为undefinednull,需要特殊处理
  • 大型数组分组时,考虑使用for循环代替reduce以获得更好性能
  • 分组函数可以是字符串属性名,也可以是返回分组键的函数

以上方法覆盖了大多数分组场景,可根据具体需求选择合适实现方式。

标签: 函数js
分享给朋友:

相关文章

js实现全屏

js实现全屏

实现全屏的基本方法 使用JavaScript实现全屏功能主要依赖Element.requestFullscreen()方法。现代浏览器均支持此API,但不同浏览器可能需要添加前缀。 // 触发全屏…

js 进度条的实现

js 进度条的实现

使用 HTML 和 CSS 创建基础进度条 HTML 结构可以简单使用一个 div 元素作为容器,内部嵌套另一个 div 表示进度: <div class="progress-containe…

原生js实现轮播图

原生js实现轮播图

基本结构搭建 HTML部分需要包含轮播图容器、图片列表及导航按钮。结构示例如下: <div class="slider-container"> <div class="slid…

js分组实现

js分组实现

分组实现方法 在JavaScript中,可以通过多种方式实现数组或对象的分组操作。以下是几种常见的方法: 使用Array.prototype.reduce() 通过reduce方法可以轻松实现数组分…

js实现求导

js实现求导

实现数值求导的方法 在JavaScript中实现求导通常采用数值方法,因为JavaScript不是符号计算语言。以下是常见的数值微分方法: 中心差分法 中心差分法提供较高精度的导数近似:…

js实现授权

js实现授权

授权流程设计 授权流程通常涉及前端与后端的交互,常见方案包括OAuth2.0、JWT等。以JWT为例的典型流程: 用户提交凭证(如用户名密码)到认证服务 服务端验证通过后生成包含用户信息的J…