效果

原数据
{
"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;
}

示例代码

示例代码

最新文章

  1. web前端学习部落22群分享给需要前端练手项目
  2. Python 遍历文件,字符串操作
  3. 在centos下部署docker内网私服
  4. 织梦系统中出现DedeTag Engine Create File False提示原因及解决方法
  5. 再谈C++继承
  6. Delphi EVariantTypeCastError错误的解决方法
  7. 解决Oracle ORA-00984: column not allowed here
  8. MYSQL 删除二进制日志的 3 个方法
  9. Spring应用上下文中Bean的生命周期
  10. Asp.net 不安全端口 解决chrome浏览器访问时提示:ERR_UNSAFE_PORT
  11. Android开发之初识MVP模式
  12. 【AGC030D】Inversion Sum DP
  13. RabbitMQ全网资料收集
  14. [php]php设计模式 (总结)
  15. 关于 Shell 的相关概念和配置方法,全在这儿了!
  16. JDK源码分析(2)LinkedList
  17. pandas基础
  18. java中的关键字、保留字、标识符
  19. 使用INTERSECT运算符
  20. mysql--------四种索引类型

热门文章

  1. java.sql.SQLException:Column count doesn&amp;#39;t match value count at row 1
  2. 第二篇:_UICascadingTextStorage attributesAtIndex:effectiveRange:]: Range or index out of bounds
  3. Android 设置图片 Bitmap任意透明度
  4. android获取和展示音乐的频谱
  5. Android ReentrantLock
  6. 通过binlog日志统计dml语句,找出操作频繁的表
  7. 【hdu 2897】邂逅明下
  8. eclipse使用Hibernate tools反向工程插件遇到的几个问题
  9. push的时候隐藏底部的tabbar
  10. 小强的HTML5移动开发之路(21)—— PhoneGap