两种方法解决json数据中属性名key的修改

tree型数据分多层级菜单,只有在其中某一级使用了a这个变量名,在其他层级的数据结构中使用的是b这个变量名,需要将key值统一成a或者b

json数据:

let zf_jsonObj = [
  {
    name: '用户权限管理',
    children: [
      {
        name: '二级菜单',
        auth_item: [
          {
            name: '三级菜单',
            auth_item: []
          }
        ]
      }
    ]
  },
  {
    name: '管理人员设置',
    children: [
      {
        name: '二级菜单',
        auth_item: [
          {
            name: '三级菜单',
            auth_item: []
          }
        ]
      }
    ]
  }
]

方法一:使用正则来修改Tree型json数据中的key属性名:

/**
* params date <array> 需要修改的json格式的数组
* params newKey <string> 需要修改成的key值
* params oldKey <string> 需要被修改的key值
*/
function changeTreeDate(zf_jsonObj, newKey, oldKey) {
  let str = JSON.stringify(zf_jsonObj);
  let reg = new RegExp(oldKey, 'g');
  let newStr = str.replace(reg, newKey);
  return JSON.parse(newStr);
}
let newJsonObj = changeTreeDate(zf_jsonObj, 'children', 'auth_item');
console.log(newJsonObj); // 输入结果见res1_1

方法二:使用递归,修改json格式中的key属性名

/**
* params date <array> 需要修改的json格式的数组
* params newKey <string> 需要修改成的key值
* params oldKey <string> 需要被修改的key值
*/
function changeTreeDate(date, newKey, oldKey) {
    date.forEach(item => {
        if (item[newKey]&&item[newKey].length>0) changeTreeDate(item[newKey], newKey, oldKey);
        
        else if (item[oldKey]) {
            item[newKey] = item[oldKey];
            delete item[oldKey];
            if (item[newKey].length) changeTreeDate(item[newKey], newKey, oldKey);
        }
    })
}
changeTreeDate(zf_jsonObj, 'children', 'auth_item');
console.log(zf_jsonObj); // 输出结果见res1_1

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值