【算法】在vue3的ts代码中分组group聚合源数据列表
有一个IList<any>()对象列表,
示例数据为[{id:'1',fieldName:'field1',value:'1'},{id:'1',fieldName:'field2',value:'2'},{id:'2',fieldName:'field1',value:'1'},{id:'2',fieldName:'field2',value:'2'}]
那么在ts中将它们根据id分组构建为两个dynamicObject,类推,如果id有n个,那需要自动构建n个dynamicObject。
算法实现:
1 const list: IList<any> = [
2 { id: '1', fieldName: 'field1', value: '1' },
3 { id: '1', fieldName: 'field2', value: '2' },
4 { id: '2', fieldName: 'field1', value: '1' },
5 { id: '2', fieldName: 'field2', value: '2' }
6 ];
7
8 const map = new Map<string, any>();
9
10 for (const item of list) {
11 if (!map.has(item.id)) {
12 const newObj = {};
13 newObj['id'] = item.id;
14 map.set(item.id, newObj);
15 }
16 const obj = map.get(item.id);
17 obj[item.fieldName] = item.value;
18 }
19
20 console.log(map);
21
22 //将map转化为数组,可以进行for或forEach循环
23 const arrList = [...map];
24
25 console.log(arrList);
26 //arrayList产生2条数据:{id:'1',field1:'1',field2:'2'},{id:'2',field1:'1',field2:'2'}
27 arrList.forEach((item: any) => {
28 //item[0]的值为1,即map的key
29 //item[1]的值为{id:'1',field1:'1',field2:'2'}
30 //continue类推
31 });
在以上的TS代码中,我们通过使用map函数对一个包含多个对象的数组进行了聚合操作。这些对象具有相同的id属性,我们根据这个属性将它们进行分组。
首先,我们创建了一个空对象result,用于存储聚合后的结果。然后,我们使用Array.prototype.map()函数对原始数组进行迭代。在每次迭代中,我们取出当前对象,通过map()函数将其转换为一个新的对象。
在转换过程中,我们使用了Object.assign()函数来复制当前对象的内容,并添加一个新的属性fields。这个属性的值是一个空对象{},它将用于存储与当前对象具有相同id属性的其他对象。
接下来,我们再次使用map()函数对原始数组进行迭代,但这次我们只关注具有与当前对象相同id属性的对象。我们将这些对象赋值给一个新对象obj,并使用Object.assign()函数将其添加到之前创建的fields对象中。
最后,我们将包含所有聚合对象的result数组输出到控制台。
通过这个聚合操作,我们可以将具有相同id属性的对象合并在一起,形成一个包含多个字段的对象。这样的操作在处理大量数据时非常有用,可以减少重复数据,提高数据处理效率。
【算法】在vue3的ts代码中分组group聚合源数据列表的更多相关文章
- Xpath在选择器中正确,在代码中返回的是空列表问题
一.问题: 在进行爬虫的时候我们会用到xpath解析html文件,但是会有一种情况就是在xpath选择器中可以使用,但是在代码中就无法使用的情况. 二.原因: 1.是元素中有tbody的原因,这个元素 ...
- mongoDB 分组并对分组结果筛选类似于SQL中的(group by xxx having ) 附带Java代码
今天需要做一个筛选程序,因为数据放在mongodb中,没写过分组的查询语句,查了一些资料,终于写出来了,分享给各位小伙伴 需求是 查询 学员 在2019-07-29之后未同步的数据(同一个学员需要2条 ...
- C++算法代码——纪念品分组[NOIP2007 普及组]
题目来自:http://218.5.5.242:9018/JudgeOnline/problem.php?id=1099 https://www.luogu.com.cn/problem/P1094 ...
- html代码中的form参数是基本一致的
由于pear的大多数模块仍处于开发当中,因此,这里列举的是随着php4.05一起发布的pear中的模块,需要注意的是,一些抽象类或者是基类(如mail.php,log.php,cache.php)没有 ...
- ts流中的pcr与pts计算与逆运算
mpeg2ts文件格式中有pcr和pts的概念,其代码含义如下: PCR(Program Clock Reference)--指示系统时钟本身的瞬时值的时间标签称为节目参考时钟标签(PCR). PTS ...
- 在Vue3+TypeScript 前端项目中使用事件总线Mitt
事件总线Mitt使用非常简单,本篇随笔介绍在Vue3+TypeScript 前端项目中使用的一些场景和思路.我们在Vue 的项目中,经常会通过emits 触发事件来通知组件或者页面进行相应的处理,不过 ...
- 在基于vue-next-admin的Vue3+TypeScript前端项目中,为了使用方便全局挂载的对象接口
在基于vue-next-admin 的 Vue3+TypeScript 前端项目中,可以整合自己的 .NET 后端,前端操作一些功能的时候,为了使用方便全局挂载的对象接口,以便能够快速处理一些特殊的操 ...
- Android 在C代码中调用logcat
本文给<Android java传递int类型数组给C>中添加C代码中调用logcat的功能 Android.mk文件增加以下内容 LOCAL_LDLIBS += -llog C代码中增加 ...
- 一个超复杂的间接递归——C语言初学者代码中的常见错误与瑕疵(6)
问题: 问题出处见 C语言初学者代码中的常见错误与瑕疵(5) . 在该文的最后,曾提到完成的代码还有进一步改进的余地.本文完成了这个改进.所以本文讨论的并不是初学者代码中的常见错误与瑕疵,而是对我自己 ...
- 要心中有“数”——C语言初学者代码中的常见错误与瑕疵(8)
在 C语言初学者代码中的常见错误与瑕疵(7) 中,我给出的重构代码中存在BUG.这个BUG是在飞鸟_Asuka网友指出“是不是时间复杂度比较大”,并说他“第一眼看到我就想把它当成一个数学问题来做”之后 ...
随机推荐
- 4G LTE/EPC UE 的业务请求流程
目录 文章目录 目录 UE 发起业务请求(Service Request)流程 UE 侧发起的业务请求流程 网络侧发起的业务请求流程 UE 发起业务请求(Service Request)流程 作用:附 ...
- Unicode 15.0 标准已发布,新增鹅、豌豆等 20个emoji
原文地址:The Unicode Blog: Announcing The Unicode Standard, Version 15.0 Unicode 标准版本 15.0 现已推出,包括核心规范.附 ...
- 食道测压结合Manoview软件
我认为是位于食道开始的地方是上食道括约肌(UES):upper esophageal sphincte,吞咽时,此处的压力会有变大.食道结束的地方是食道下括约肌(LES),从这在往下就是胃,一般情况这 ...
- Android OpenMAX(一)漫谈
在开始正式的学习前,我们先来聊一聊Android音视频开发中的一些问题.感受与想法.(有一点要事先说明,我的问题与答案.想法并不一定正确,请读者带着审慎的思考来阅读,后续的文章也是一样,希望读者边阅读 ...
- .net C# System.Text.Json 如何将 string类型的“true”转换为布尔值 解决方案
直接上解决方法的代码 先定义一个转换顺,代码如下: public sealed class AnhBoolConverter : JsonConverter<bool?> { public ...
- 探索Semantic Plugins:开启大模型的技能之门
前言 在之前的章节中我们或多或少的已经接触到了 Semantic Kernel 的 Plugins,本章我们讲详细介绍如何使用插件. Semantic Kernel 的一大特点是拥有强大的插件,通过结 ...
- python安装OCR识别库
(1)安装过程 参考的这个博客:https://blog.csdn.net/lanxianghua/article/details/100516187?depth_1-utm_source=distr ...
- 开源的Datadog?可观测性平台SigNoz是否名副其实?
SigNoz号称自己是开源领域的Datadog,基于OpenTelemetry做了一套可观测性方案.夜莺从V6版本开始,也希望做全栈可观测性方案,巧了,大家目标一致,今天我们一起来对SigNoz做个初 ...
- Vue学习:13.生命周期综合
0基础如何进入IT行业? 简介:对于没有任何相关背景知识的人来说,如何才能成功进入IT行业?是否有一些特定的方法或技巧可以帮助他们实现这一目标? 方向一:学习路径 明确兴趣和目标:首先确定你对IT领域 ...
- Java中的Collection集合(单列集合)
1.集合概述 集合:集合是java中提供的一种容器,可以用来存储多个数据. 集合与数组的区别: (1)数组的长度是固定的,集合的长度是可变的. (2)数组中存储的是同一类型的元素,可以存储基本数据类型 ...