练习-js递归修改键名

380 阅读1分钟
前言

提示:下面案例可供参考

假设,我们从后端取回来的Json对象数据中,有某些属性名不是我们想要的,就需要给它们重新命名。例如:把数组里的label转换成name

const info = [  {    label: '一级 1',    children: [{ label: '二级 1-1', children: [{ label: '三级 1-1-1' }] }]
  },
  {
    label: '一级 2',
    children: [
      { label: '二级 2-1', children: [{ label: '三级 2-1-1' }] },
      { label: '二级 2-2', children: [{ label: '三级 2-2-1' }] }
    ]
  },
  {
    label: '一级 3',
    children: [
      { label: '二级 3-1', children: [{ label: '三级 3-1-1' }] },
      { label: '二级 3-2', children: [{ label: '三级 3-2-1' }] }
    ]
  }
];

第一种方法 使用数组的map方法

const oneMap = obj => {
  let arr = [];
  // eslint-disable-next-line array-callback-return
  obj.map(item => {
    let obj = {
      name: '',
      children: []
    };
    obj.name = item.label;
    if (item.children && item.children.length > 0) {
      obj.children = oneMap(item.children);
      // item.children
    }
    arr.push(obj);
  });
  return arr;
};
console.log(oneMap(info));

打印结果

image.png

第二种方法

JSON.parse(JSON.stringify(info).replace(/label/g,'name'))

说明:

  1. JSON.stringify() 把json对象 转成 json字符串
  2. 使用正则的 replace() 方法替换属性名
  3. JSON.parse() 再把json字符串 转成 json对象