当前位置:首页 > JavaScript

js实现分组

2026-03-13 17:58:46JavaScript

实现数组分组的方法

在JavaScript中,可以通过多种方式实现数组分组操作。以下是几种常见的方法:

使用reduce方法

通过Array.prototype.reduce()方法可以高效地对数组进行分组:

const groupBy = (array, key) => {
  return array.reduce((result, currentItem) => {
    const groupKey = currentItem[key];
    (result[groupKey] = result[groupKey] || []).push(currentItem);
    return result;
  }, {});
};

// 示例用法
const data = [
  { id: 1, category: 'A' },
  { id: 2, category: 'B' },
  { id: 3, category: 'A' }
];
const groupedData = groupBy(data, 'category');

使用forEach循环

通过简单的forEach循环也能实现分组:

js实现分组

function groupBy(array, property) {
  const grouped = {};
  array.forEach(item => {
    const key = item[property];
    if (!grouped[key]) {
      grouped[key] = [];
    }
    grouped[key].push(item);
  });
  return grouped;
}

使用Map对象

利用Map对象可以创建更灵活的分组结构:

function groupByMap(array, keyFn) {
  const map = new Map();
  array.forEach(item => {
    const key = keyFn(item);
    const collection = map.get(key);
    if (!collection) {
      map.set(key, [item]);
    } else {
      collection.push(item);
    }
  });
  return map;
}

// 示例用法
const result = groupByMap(data, item => item.category);

使用lodash库

如果项目中已经使用了lodash,可以直接使用其groupBy方法:

js实现分组

const _ = require('lodash');
const grouped = _.groupBy(data, 'category');

按条件分组

当需要根据更复杂的条件而非简单属性值进行分组时:

function groupByCondition(array, conditionFn) {
  return array.reduce((acc, item) => {
    const key = conditionFn(item);
    acc[key] = acc[key] || [];
    acc[key].push(item);
    return acc;
  }, {});
}

// 示例:按字符串长度分组
const strings = ['a', 'bb', 'ccc', 'dd'];
const groupedByLength = groupByCondition(strings, str => str.length);

多级分组

对于需要多层嵌套的分组情况:

function multiLevelGroup(array, ...keys) {
  return array.reduce((result, item) => {
    keys.reduce((acc, key, i) => {
      const groupKey = item[key];
      if (i === keys.length - 1) {
        (acc[groupKey] = acc[groupKey] || []).push(item);
      } else {
        acc[groupKey] = acc[groupKey] || {};
      }
      return acc[groupKey];
    }, result);
    return result;
  }, {});
}

这些方法覆盖了从简单到复杂的分组需求,可以根据具体场景选择最适合的实现方式。

标签: js
分享给朋友:

相关文章

js实现轮播

js实现轮播

实现基础轮播效果 使用HTML结构创建轮播容器和图片元素: <div class="carousel"> <div class="carousel-inner">…

js 实现链表

js 实现链表

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。与数组不同,链表在内存中是非连续存储的,插入和删除操作效率较高。 链表的实现 在 JavaScrip…

js实现抽奖

js实现抽奖

实现抽奖功能的基本思路 抽奖功能的核心是随机选择奖项并展示结果。可以通过数组存储奖项,利用随机数生成索引,最后通过动画增强用户体验。 准备奖项数据 定义一个数组存储奖项信息,每个奖项可以包含名称、图…

js怎么实现异步

js怎么实现异步

异步实现方法 JavaScript中实现异步操作主要通过以下几种方式: Promise Promise是ES6引入的异步解决方案,用于处理异步操作的成功或失败状态。 const promise =…

js实现图片

js实现图片

图片加载与显示 在JavaScript中,可以通过Image对象动态加载图片。创建实例后设置src属性触发加载,通过onload回调处理加载完成后的操作: const img = new Ima…

js 实现图片 放大

js 实现图片 放大

使用 CSS transform 实现图片放大 通过 CSS 的 transform: scale() 属性可以实现图片的平滑放大效果。结合 JavaScript 监听鼠标事件控制放大状态: con…