javascript Array groupBy javascript中如何根据列表元素中的某个字段对列表进行分组操作?

2024-06-10 01:36

本文主要是介绍javascript Array groupBy javascript中如何根据列表元素中的某个字段对列表进行分组操作?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • Intro
    • demo
    • 参考

Intro

完整描述:SQL中有 group by xxx 的筛选方式。而在 javascript 中,如何实现以下需求?
根据某个列表元素中的某个条件(可能是多个字段),将列表中的元素分成几组。

目前(2024-06-09) javascript 的 Array 类型还没有对外提供类似于 groupby 的方法。
所以我们只能自己实现了。
你可以自己实现,多用几次for循环,达到分组效果。
也可以参考以下,借助于Array.prototype.reduct API遍历一次就得到分组后的数据。

demo

// 原数据格式 [obj...]
var productDataList = [{ category: "Fruits", price: "$1", stocked: true, name: "Apple" },{ category: "Fruits", price: "$1", stocked: true, name: "Dragonfruit" },{ category: "Fruits", price: "$2", stocked: false, name: "Passionfruit" },{ category: "Vegetables", price: "$2", stocked: true, name: "Spinach" },{ category: "Vegetables", price: "$4", stocked: false, name: "Pumpkin" },{ category: "Vegetables", price: "$1", stocked: true, name: "Peas" }
];// 用 Array.prototype.reduct 实现类似于 groupBy 的效果。
var categoryAndObjMapList = productDataList.reduce((result, currValue) => {let currCategory = currValue.category;// 当前分类已经有了,非空数组,则向对应分类下的列表中新增一个元素if (Object.keys(result).includes(currCategory)) {result[currCategory].push(currValue);} else {// 初始化新的分类,并同时设置第一个元素result[currCategory] = [currValue];}console.log({currCategory, result});return result;
}, {});// 转换后的数据格式:{ "分类1": [obj...], "分类2": [obj...] }
console.log(categoryAndObjMapList);
{"Fruits": [{ "category": "Fruits", "price": "$1", "stocked": true, "name": "Apple" },{ "category": "Fruits", "price": "$1", "stocked": true, "name": "Dragonfruit" },{ "category": "Fruits", "price": "$2", "stocked": false, "name": "Passionfruit" }],"Vegetables": [{ "category": "Vegetables", "price": "$2", "stocked": true, "name": "Spinach" },{ "category": "Vegetables", "price": "$4", "stocked": false, "name": "Pumpkin" },{ "category": "Vegetables", "price": "$1", "stocked": true, "name": "Peas" }]
}

其中起到 groupBy 作用的方法实现部分,可以简写为如下:

var categoryAndObjMapList = productDataList.reduce((result, currValue) => {let currCategory = currValue.category;result[currCategory] = (result[currCategory]) ?? [];	// 如果 result[currCategory] 已有值则不变,如为空则设置为空数组。result[currCategory].push(currValue);return result;
}, {});

参考

  • javascript Array.prototype.reduct
  • javascript ?? 空值合并运算符

这篇关于javascript Array groupBy javascript中如何根据列表元素中的某个字段对列表进行分组操作?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1046879

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听