首页 > 编程语言 >【算法】在vue3的ts代码中分组group聚合源数据列表

【算法】在vue3的ts代码中分组group聚合源数据列表

时间:2023-08-23 10:12:34浏览次数:60  
标签:map group 对象 ts value item fieldName vue3 id

有一个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属性的对象合并在一起,形成一个包含多个字段的对象。这样的操作在处理大量数据时非常有用,可以减少重复数据,提高数据处理效率。

标签:map,group,对象,ts,value,item,fieldName,vue3,id
From: https://www.cnblogs.com/lan80/p/17650422.html

相关文章

  • AOJ0525(bitset, 穷举)
    这题有3点要注意:1.thefliporderisnotrelatedtoresult.2.whywecansimplycounttomaximumofnumbereachcolumn?Imagineonlymanipulatetherow,itiseasytounderstandthatitisunnecessarytoflipthemratherthancountthemaximumside.3.Aga......
  • LightDB支持drop table时cascade constraints语法
    在Oracle数据库中,droptable语法如下:即droptable时通过cascadeconstraints级联删除所有该表中的约束。在LightDB23.3版本中,droptable同样支持了constraints关键字,自动删除依赖于表的所有约束对象。语法结构如下:DROPTABLE[IFEXISTS]name[,...][CASCADE[CONSTRA......
  • Tiny Pockets:将成人和儿童的创意融合成神奇故事的世界
    故事是孩子们成长过程中的重要伴侣,也是创意和想象力的源泉。为了让孩子们的创意和大人的智慧相结合,TinyPockets应运而生,借助人工智能技术创造独特的故事。它开启了一个神奇的世界,将成人和儿童的创意融合成令人惊叹的奇幻故事。本文将深入介绍TinyPockets的作用及其在创意故事领域......
  • 在uniapp中如何使用echarts
    前言当今,数据可视化已经成当今,随着数据的日益增长,数据可视化变得越来越重要。ECharts是一个强大的数据可视化工具,它提供了丰富的图表类型和交互方式,可以帮助我们更好地理解和分析数据。当今的数据可视化已成为数据分析和决策制定的重要工当今时代,数据分析和可视化已经成为了各行......
  • sql语句中exists用法详解
    文章目录一、语法说明exists:notexists:二、常用示例说明1.查询a表在b表中存在数据2.查询a表在b表中不存在数据3.查询时间最新记录4.exists替代distinct剔除重复数据总结一、语法说明exists:括号内子查询sql语句返回结果不为空(即:sql返回的结果为真),子查询的结果不为空这条件成立,执行......
  • P3011 [USACO11JAN] Traffic Lights S
    P3011[USACO11JAN]TrafficLightsS目录P3011[USACO11JAN]TrafficLightsS题目题目描述输入输出格式输入格式输出格式题目描述输入格式输出格式样例#1样例输入#1样例输出#1思路code题目题目描述和FJ靠的最近的城市Kenosha市有\(M\)条道路。(编号为\(1-M\))连接着\(N......
  • 通过一个实际的 Fiori Elements 扩展开发需求,介绍什么是 SAP Fiori Extension API 试
    本教程前一篇文章,介绍了如何在SAPFioriElementsListReport应用的Table区域里创建自定义Action,并且在该Action对应按钮的点击事件处理函数里,使用JavaScript代码打印出当前选中的表格行项目的业务数据。效果如下图所示:前一篇教程的解决方案,根据按钮的press事件点......
  • SAP Fiori Elements List Report 如何在扩展开发里使用代码获得当前选中的表格行项目
    笔者从2007年电子科技大学计算机专业硕士毕业后加入SAP成都研究院,一直从事SAP产品设计和研发工作至今,对SAP多项技术有着深入透彻的研究,尤其精通ABAP编程,SAPUI5(Fiori)应用开发和SAPOData服务开发。笔者将自己在SAP领域16年(2007~2023)的技术沉淀,进行了系统的归......
  • 如何使用 Guided Development 给 Fiori Elements List Report 的工具栏添加自定义按钮
    本教程之前的步骤,我们介绍了如何使用SAPFioriTools这个扩展包的ApplicationModeler提供的PageMap来给ListReport的Table控件添加自定义列的步骤。本文介绍另一种在FioriElements应用里进行扩展开发的方式,即FioriElementsGuidedDevelopment工具向导。按照......
  • 云存储EasyCVR视频汇聚平台分发rtsp流时,出现“用户已过期”提示该如何解决?
    视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同,支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。音视频流媒体视频平台EasyCVR拓展性强,视频能力丰富,具体可实现视频监控直播、视频轮播、视频录像、云存储、回放与检索、智能告警、服务器集......