数组中的对象的特征值提取生成新对象实现方法
最近要做一个可视化的SQL语句生成功能视图,
项目中遇到一个JSON保存后还原的问题,由于保存之前和后台沟通约定好保存的JSON格式,所以在还原的时候,就要按照保存的格式来进行逆向解析。
首先来看一下保存的JSON内容
var oldObj= [{"fieldName": "上班时间1","fieldId": "working_hours_1","fieldType": "time","parentTableId": "class_table","parentTableName": "班别表","order": 0,"checked": false},{"fieldName": "下班时间1","fieldId": "off_hours_1","fieldType": "time","parentTableId": "class_table","parentTableName": "班别表","order": 0,"checked": false},{"fieldName": "上班时间2","fieldId": "working_hours_2","fieldType": "time","parentTableId": "class_table","parentTableName": "班别表","order": 0,"checked": false},{"fieldName": "下班时间2","fieldId": "off_hours_2","fieldType": "time","parentTableId": "class_table","parentTableName": "班别表","order": 0,"checked": false},{"fieldName": "姓名","fieldId": "name","fieldType": "text","parentTableId": "punch_card_record","parentTableName": "打卡记录","order": 0,"checked": false},{"fieldName": "工号","fieldId": "job_number","fieldType": "text","parentTableId": "punch_card_record","parentTableName": "打卡记录","order": 0,"checked": false},{"fieldName": "打卡时间","fieldId": "punch_time","fieldType": "datetime","parentTableId": "punch_card_record","parentTableName": "打卡记录","order": 0,"checked": false}],
注:请忽略对象中的order,checked字段。
我们姑且将oldObj数组中的每个obj称之为字段, 可以看到字段的 parentTableId 是有出现重复的情况的,
而我们要将这个数组解析成一个以 parentTableId 为特征值的新对象。
var newObj = [{"parentFormId": "class_table","parentFormName": "班别表","fields": [{"fieldName": "上班时间1","fieldId": "working_hours_1","fieldType": "time","parentTableId": "class_table","parentTableName": "班别表","order": 0,"checked": false},{"fieldName": "下班时间1","fieldId": "off_hours_1","fieldType": "time","parentTableId": "class_table","parentTableName": "班别表","order": 0,"checked": false},{"fieldName": "上班时间2","fieldId": "working_hours_2","fieldType": "time","parentTableId": "class_table","parentTableName": "班别表","order": 0,"checked": false},{"fieldName": "下班时间2","fieldId": "off_hours_2","fieldType": "time","parentTableId": "class_table","parentTableName": "班别表","order": 0,"checked": false}]},{"parentFormId": "punch_card_record","parentFormName": "打卡记录","fields": [{"fieldName": "姓名","fieldId": "name","fieldType": "text","parentTableId": "punch_card_record","parentTableName": "打卡记录","order": 0,"checked": false},{"fieldName": "工号","fieldId": "job_number","fieldType": "text","parentTableId": "punch_card_record","parentTableName": "打卡记录","order": 0,"checked": false},{"fieldName": "打卡时间","fieldId": "punch_time","fieldType": "datetime","parentTableId": "punch_card_record","parentTableName": "打卡记录","order": 0,"checked": false}]} ]
注:请忽略新对象中的 parentTableId,parentTableName,order,checked 字段, 因为不影响我们的目的,为了方便直接就把对象push进去了。
可以看到,新数组对象中,将字段中的parentTable的ID,Name都提取了出来,并且将这些字段push到了一个newObj数组里面。
那么这个实现的结果,是怎么达成的呢,且看一下代码:
//新建一个用于存放特征值的数组 let parentTableIdArray = []; //遍历旧数组对象 for(let item of oldObj){ //获取当前的对象parentTableId是否存在特征值数组let index = parentTableIdArray.indexOf(item.parentTableId) //当前的对象parentTableId不存在特征值数组时if(index == -1){ //将当前的对象parentTableId加入到特征值数组 parentFormIdArray.push(item.parentTableId) //生成新对象let obj = {fields: [],parentFormId: item.parentTableId,parentFormName: item.parentTableName}obj.fields.push(item); //插入新生成的对象this.newObj.push(obj);} //当前的对象parentTableId存在特征值数组时else{ //在当前的对象parentTableId的位置插入新对象this.newObj[index]['fields'].push(item);} }
这个方法可以有效的提取数组内的对象特征值。如果需要多次调用,可以考虑封装。
转载于:https://www.cnblogs.com/czaiz/p/7356609.html
数组中的对象的特征值提取生成新对象实现方法相关推荐
- python创建对象_对Python中9种生成新对象的方法总结
先定义一个类: class Point: def __init__(self, x, y): self.x = x self.y = y 下面我们使用9种方法来生成新的对象: point1 = Poi ...
- 找出数组中不重复的值php_PHP查找数值数组中不重复最大和最小的10个数的方法...
搜索热词 本文实例讲述了PHP查找数值数组中不重复最大和最小的10个数的方法.分享给大家供大家参考.具体如下: 1. PHP代码如下: PHP;"> //随机生成1万个元素的数组 fo ...
- php 取出多重数组中的一列_PHP提取多维数组指定一列的方法大全
PHP中对多维数组特定列的提取,是个很常用的功能,正因为如此,PHP在5.5.0版本之后,添加了一个专用的函数array_column().当然,如果你的PHP版本低于5.5.0,就得用别的方法处理了 ...
- 数组中的元素转成Number或者String---数组map方法
数组中的元素转成Number类型 let num: any = ["1", "2", "3"]; num = num.map(Number) ...
- java set取最大最小_Java中取得数组中最大(小)元素的几种实现方法
简介 本篇文章将主要介绍获取数组中最大(小)元素的基本方法,以及其在Java中的几种实现方法. 算法 取得数组中最大(小)元素的基本算法一般都类似于如下所示: SET MAX to array[0] ...
- Python数组中除以0但却不想报错处理方法
Python数组中除以0或者乘以无穷大但却不想报错处理方法 有时候会遇到分母是一个数组,但是数组中有0的情况,而我们又知道分母为0时商应该等于多少,不希望程序报错. 比如以下的情况: 解决方法如下: ...
- 剑指offer 04.二维数组中的查找 我妹妹都看的懂的方法
⭐欢迎来到剑指offer好题精选专栏,一起学习,一起进步⭐ 题目信息: 在一个二维数组array中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请 ...
- php中字母随机数,由数字字母生成php随机数的方法
在前面我们都是介绍了php随机数的生成方法,但是没有具体介绍生成的php随机数是什么,那么我们接下来给大家介绍php随机生成数字字母组合的方法,实例分析了php生成随机数及随机字母的相关技巧与用法,非 ...
- js合并数组对象中key相同的数据,并以此key生成新对象
1.对象判断 let newAarray = [];if (info.checkedNodes && info.checkedNodes.length > 0) {let idA ...
最新文章
- ${pageContext.request.contextPath} JSP取得绝对路径
- foreman源NO_PUBKEY 6F8600B9563278F6
- python验证码 识别代码不准_谈谈Python进行验证码识别的一些想法
- “网友”叫你先上STM32,51是小朋友玩的,所以你就不学51了
- 1024程序员节,别人家的公司真香!羡慕ing~
- oracle中rollback的使用方法
- rufus安装linux到硬盘,怎么用rufus安装 kail linux 安装到u盘
- 上海黑马python培训
- 载银纳米TiO2/壳聚糖水凝胶/pH/GSH响应羧甲基壳聚糖水凝胶和纳米凝胶的制备
- 流量贵如金,APP推广如何迈好第一步?技术和策略缺一不可
- intellij IDEA更换主题为Darcula后中文项目名称变口(方框)的解决办法
- idea的java项目怎么连数据库_idea 使用Java连接SQL Server数据库教程
- 智慧街道(乡镇)二三维网格化管理系统
- C#如何使用skinEngine控件换肤(更换皮肤)?
- 在线文档协作进行项目管理
- 打印机 “错误-正在打印”
- css实现精灵图片加载图片失败
- C语言基础选择题100道(附答案)04
- ENDNOTE中使用Adobe打开PDF后提示“只读无法保存”
- Vue3 PC桌面端聊天室|vue3.0+elementPlus仿微信/QQ界面
热门文章
- SqlServer:带IN()子句C#的参数化查询
- Odoo10教程 -- 主题教程
- java引用数据类型可以更改类型_Java改变引用数据类型的值
- java 工厂模式_软件设计工厂模式使用场景介绍及java举例(附源码)
- python画五角星代码_Python第八课 绘制五角星1.0
- tinymce移动端使用_关于在移动端避免使用100vh的原因及解决方案
- label mpchart 饼图_运用matplotlib绘制折线图、散点图、饼图、柱形图的定义代码以及案例详解...
- python df head_在方法()中调用时,Pandas Df.head()不显示?
- android跳蚤市场的功能,基于Android校园跳蚤市场设计与实现.doc
- 简单的java信息显示_JSP实现简单的用户登录并显示出用户信息的方法