最近要做一个可视化的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}]}
]

注:请忽略新对象中的 parentTableIdparentTableName,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

数组中的对象的特征值提取生成新对象实现方法相关推荐

  1. python创建对象_对Python中9种生成新对象的方法总结

    先定义一个类: class Point: def __init__(self, x, y): self.x = x self.y = y 下面我们使用9种方法来生成新的对象: point1 = Poi ...

  2. 找出数组中不重复的值php_PHP查找数值数组中不重复最大和最小的10个数的方法...

    搜索热词 本文实例讲述了PHP查找数值数组中不重复最大和最小的10个数的方法.分享给大家供大家参考.具体如下: 1. PHP代码如下: PHP;"> //随机生成1万个元素的数组 fo ...

  3. php 取出多重数组中的一列_PHP提取多维数组指定一列的方法大全

    PHP中对多维数组特定列的提取,是个很常用的功能,正因为如此,PHP在5.5.0版本之后,添加了一个专用的函数array_column().当然,如果你的PHP版本低于5.5.0,就得用别的方法处理了 ...

  4. 数组中的元素转成Number或者String---数组map方法

    数组中的元素转成Number类型 let num: any = ["1", "2", "3"]; num = num.map(Number) ...

  5. java set取最大最小_Java中取得数组中最大(小)元素的几种实现方法

    简介 本篇文章将主要介绍获取数组中最大(小)元素的基本方法,以及其在Java中的几种实现方法. 算法 取得数组中最大(小)元素的基本算法一般都类似于如下所示: SET MAX to array[0] ...

  6. Python数组中除以0但却不想报错处理方法

    Python数组中除以0或者乘以无穷大但却不想报错处理方法 有时候会遇到分母是一个数组,但是数组中有0的情况,而我们又知道分母为0时商应该等于多少,不希望程序报错. 比如以下的情况: 解决方法如下: ...

  7. 剑指offer 04.二维数组中的查找 我妹妹都看的懂的方法

    ⭐欢迎来到剑指offer好题精选专栏,一起学习,一起进步⭐ 题目信息: 在一个二维数组array中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请 ...

  8. php中字母随机数,由数字字母生成php随机数的方法

    在前面我们都是介绍了php随机数的生成方法,但是没有具体介绍生成的php随机数是什么,那么我们接下来给大家介绍php随机生成数字字母组合的方法,实例分析了php生成随机数及随机字母的相关技巧与用法,非 ...

  9. js合并数组对象中key相同的数据,并以此key生成新对象

    1.对象判断 let newAarray = [];if (info.checkedNodes && info.checkedNodes.length > 0) {let idA ...

最新文章

  1. ${pageContext.request.contextPath} JSP取得绝对路径
  2. foreman源NO_PUBKEY 6F8600B9563278F6
  3. python验证码 识别代码不准_谈谈Python进行验证码识别的一些想法
  4. “网友”叫你先上STM32,51是小朋友玩的,所以你就不学51了
  5. 1024程序员节,别人家的公司真香!羡慕ing~
  6. oracle中rollback的使用方法
  7. rufus安装linux到硬盘,怎么用rufus安装 kail linux 安装到u盘
  8. 上海黑马python培训
  9. 载银纳米TiO2/壳聚糖水凝胶/pH/GSH响应羧甲基壳聚糖水凝胶和纳米凝胶的制备
  10. 流量贵如金,APP推广如何迈好第一步?技术和策略缺一不可
  11. intellij IDEA更换主题为Darcula后中文项目名称变口(方框)的解决办法
  12. idea的java项目怎么连数据库_idea 使用Java连接SQL Server数据库教程
  13. 智慧街道(乡镇)二三维网格化管理系统
  14. C#如何使用skinEngine控件换肤(更换皮肤)?
  15. 在线文档协作进行项目管理
  16. 打印机 “错误-正在打印”
  17. css实现精灵图片加载图片失败
  18. C语言基础选择题100道(附答案)04
  19. ENDNOTE中使用Adobe打开PDF后提示“只读无法保存”
  20. Vue3 PC桌面端聊天室|vue3.0+elementPlus仿微信/QQ界面

热门文章

  1. SqlServer:带IN()子句C#的参数化查询
  2. Odoo10教程 -- 主题教程
  3. java引用数据类型可以更改类型_Java改变引用数据类型的值
  4. java 工厂模式_软件设计工厂模式使用场景介绍及java举例(附源码)
  5. python画五角星代码_Python第八课 绘制五角星1.0
  6. tinymce移动端使用_关于在移动端避免使用100vh的原因及解决方案
  7. label mpchart 饼图_运用matplotlib绘制折线图、散点图、饼图、柱形图的定义代码以及案例详解...
  8. python df head_在方法()中调用时,Pandas Df.head()不显示?
  9. android跳蚤市场的功能,基于Android校园跳蚤市场设计与实现.doc
  10. 简单的java信息显示_JSP实现简单的用户登录并显示出用户信息的方法