合并 && 还原属性链
效果
原数据
{
"id": 10,
"text": {
"title": "title",
"content": "content"
},
"image": {
"url": "image url",
"name": "image name",
"size": "900KB"
}
}
1.还原(拆解)属性链
[
{
"key": "id",
"value": 10
},
{
"key": "text.title",
"value": "title"
},
{
"key": "text.content",
"value": "content"
},
{
"key": "image.url",
"value": "image url"
},
{
"key": "image.name",
"value": "image name"
},
{
"key": "image.size",
"value": "900KB"
}
]
2.合并属性链
{
"id": 10,
"text": {
"title": "title",
"content": "content"
},
"image": {
"url": "image url",
"name": "image name",
"size": "900KB"
}
}
关键代码
// 合并属性链
Merge(items): any {
var res = {}
for (let i = 0; i < items.length; i++) {
var item = items[i];
// key
var prochains: string[] = item.key.split('.');//属性链
var tmpObj = res;
//组织属性
for (let i = 0; i < prochains.length; i++) {
const pro = prochains[i];
var islast = i == prochains.length - 1;
//没有属性就创建为obj
if (!tmpObj.hasOwnProperty(pro)) {
tmpObj[pro] = {}
}
else {
//检查一下,如果已经有属性了, 并且现在不是最后一个属性, 那么这个地方应该是obj,不是的话说明属性链有问题
if(typeof tmpObj[pro]!=="object"&&!islast){
tmpObj[pro] = {}
}
}
//属性链最后一个要赋值
if (islast) {
// value
tmpObj[pro] = item.value;
}
//属性下钻
tmpObj = tmpObj[pro]
}
}
return res;
}
// 还原属性链
objPro2ProDic(obj, dic, root) {
if (!dic) {
dic = [];
}
for (const key in obj) {
if (obj.hasOwnProperty(key)) {
const ele = obj[key];
if (typeof ele === "object" && !(ele instanceof Array)) {
//下钻
this.objPro2ProDic(ele, dic,key)
}
else{
var _key = root?`${root}.${key}`:key;
// 这里返回key-value
dic.push({
key:_key,
value:ele
});
}
}
}
return dic;
}
示例代码
合并 && 还原属性链的更多相关文章
- 【WPF学习笔记】[转]周银辉之WPF中的动画 && 晓风影天之wpf动画——new PropertyPath属性链
(一)WPF中的动画 动画无疑是WPF中最吸引人的特色之一,其可以像Flash一样平滑地播放并与程序逻辑进行很好的交互.这里我们讨论一下故事板. 在WPF中我们采用Storyboard(故事板)的方式 ...
- 2016湖南省赛 I Tree Intersection(线段树合并,树链剖分)
2016湖南省赛 I Tree Intersection(线段树合并,树链剖分) 传送门:https://ac.nowcoder.com/acm/contest/1112/I 题意: 给你一个n个结点 ...
- [No000098]SVN学习笔记5-分支,合并,属性,补丁,锁,分支图
行结束符和空白选项 在项目的生命周期中,有时可能会将行结束符由 CRLF 改为 LF,或者修改一段代码的缩进.不幸的是这样将会使大量的代码行被标记为已修改,尽管代码本身并没有被修改.这里列出的选项将会 ...
- List集合,对象根据某个相同的属性,合并另外属性
描述及实现: 1.List中有 Modular字段值有重复一样的2.Modular字段一样的话去重并且OrderAmount相加 HashMap<String,DataReport> te ...
- js篇-数组合并其中属性值相同的项目且属性值相加
项目背景是:var a = [{id:1,num:"12"},{id:2,num:"13"},{id:3,num:"3"},{id:2,nu ...
- 2019 renew 博客目录
.net && .net core Microsoft.AspNet.SignalR实现弹幕(即时通讯) C#调用JS httpclient POST请求(urlencoded) 二维 ...
- NPOI操作EXCEL(五)——含合并单元格复杂表头的EXCEL解析
我们在第三篇文章中谈到了那些非常反人类的excel模板,博主为了养家糊口,也玩命做出了相应的解析方法... 我们先来看看第一类复杂表头: ...... 博主称这类excel模板为略复杂表头模板(蓝色部 ...
- xtrabackup备份还原mariadb数据库
一.xtrabackup 简介 xtrabackup 是由percona公司开源免费的数据库热备软件,它能对InnoDB数据库和XtraDB存储引擎的数据库非阻塞地备份,对于myisam的备份同样需要 ...
- MySQL数据库备份还原
本文以CentOS 7 yum安装的MariaDB-server5.5为例,说明MySQL的几种 备份还原方式 将服务器A(192.168.1.100)上的数据库备份,还原到B(192.168.1.2 ...
随机推荐
- WEB应用图片的格式,以及各自的特点和优化(一) by FungLeo
WEB应用图片的格式,以及各自的特点和优化(一) by FungLeo 前言 12年前我入行三天.用table布局做了一个非常粗糙的网页.我说了一句话,"网页就是表格加文字加图片,图片分两种 ...
- iOS开发之Quarz2D:九:图形上下文矩阵操作
#import "VCView.h" @implementation VCView - (void)drawRect:(CGRect)rect { // Drawing code ...
- Cocos2d-x学习笔记(16)(常见22种特效)
1.CCShaky3D::create(int range.bool shakeZ,const ccGridSize& gridSize,float duration)//创建一个3D晃动的特 ...
- lower_case_table_names(大小写敏感)
1 简介 在MySQL中,数据库对应数据目录中的目录.数据库中的每个表至少对应数据库目录中的一个文件(也可能是多个,取决于存储引擎).因此,所使用操作系统的大小写敏感性决定了数据库名和表名的大小 ...
- 拉伸按钮背景图片:stretchableImageWithLeftCapWidth:
// 1. 拉伸按钮背景图片 // 1) 登录按钮 UIImage *loginImage = [UIImage imageNamed:@"LoginGreenBigBtn"]; ...
- 【序列操作III】线段树
题目描述 给出序列 a1,a2,…an(0≤ai≤109),有关序列的四种操作: 1. al,al+1,…,ar(1≤l≤r≤n)加上 x(-103≤x≤103) 2. al,al+1,…,ar(1≤ ...
- Video processing systems and methods
BACKGROUND The present invention relates to video processing systems. Advances in imaging technology ...
- vim note (2)
:e edit :edit edit :e. edit current file '.' a dot is means current : w writ ...
- 【20.19%】【codeforces 629D】Babaei and Birthday Cake
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- Android中数据库和安装包分离
我们在做Android应用尤其是商业应用的时候,很多时候都需要后期版本升级,如果我们的数据库文件非常大,比如游戏之类的,这时候就不应该每次版本更新都去重新复制数据库.将数据库和安装包分离,下面来详细介 ...