合并 && 还原属性链
2024-10-01 22:48:44
效果
原数据
{
"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;
}
示例代码
最新文章
- web前端学习部落22群分享给需要前端练手项目
- Python 遍历文件,字符串操作
- 在centos下部署docker内网私服
- 织梦系统中出现DedeTag Engine Create File False提示原因及解决方法
- 再谈C++继承
- Delphi EVariantTypeCastError错误的解决方法
- 解决Oracle ORA-00984: column not allowed here
- MYSQL 删除二进制日志的 3 个方法
- Spring应用上下文中Bean的生命周期
- Asp.net 不安全端口 解决chrome浏览器访问时提示:ERR_UNSAFE_PORT
- Android开发之初识MVP模式
- 【AGC030D】Inversion Sum DP
- RabbitMQ全网资料收集
- [php]php设计模式 (总结)
- 关于 Shell 的相关概念和配置方法,全在这儿了!
- JDK源码分析(2)LinkedList
- pandas基础
- java中的关键字、保留字、标识符
- 使用INTERSECT运算符
- mysql--------四种索引类型
热门文章
- java.sql.SQLException:Column count doesn&;#39;t match value count at row 1
- 第二篇:_UICascadingTextStorage attributesAtIndex:effectiveRange:]: Range or index out of bounds
- Android 设置图片 Bitmap任意透明度
- android获取和展示音乐的频谱
- Android ReentrantLock
- 通过binlog日志统计dml语句,找出操作频繁的表
- 【hdu 2897】邂逅明下
- eclipse使用Hibernate tools反向工程插件遇到的几个问题
- push的时候隐藏底部的tabbar
- 小强的HTML5移动开发之路(21)—— PhoneGap