JS替换对象的属性名

2,281 阅读2分钟

需求:用obj1的属性值替换掉obj2的属性名

1.普通对象中替换

// 原对象
 const obj1 = {
        '入职日期': 'timeOfEntry',
        '手机号': 'mobile',
        '姓名': 'username',
        '转正日期': 'correctionTime',
        '工号': 'workNumber',
        '部门': 'departmentName'
      }
      
      
 // 现有对象:
 const obj2 = {
        入职日期: 44505,
        姓名: "小张",
        工号: "9002",
        手机号: "13800000152",
        转正日期: 44892,
        部门: "总裁办"
      };

2.实现代码:

 obj2 = Object.entries(obj1).reduce((acc, [k, v]) => {
        acc[v] = obj2[k]
        return acc
      }, {})
      
      console.log(obj2);
      // 打印结果:
      {
        correctionTime: 44892;
        departmentName: "总裁办";
        mobile: "13800000152";
        timeOfEntry: 44505;
        username: "小张";
        workNumber: "9002";
        }
    
    // 简写: 打印结果一样
    obj2 = Object.entries(obj1).reduce( (acc, [k, v]) => ((acc[v] = obj2[k]), acc),{});

2.数组数据中的对象替换

// 现有对象  用mapInfo的属性值替换数组对象中的属性名
const mapInfo = {
        入职日期: "timeOfEntry",
        手机号: "mobile",
        姓名: "username",
        转正日期: "correctionTime",
        工号: "workNumber",
        部门: "departmentName"
      };
      
//要处理的数组对象结构
 const arr =[{
        入职日期: 44505,
        姓名: "小张",
        工号: "9002",
        手机号: "13800000152",
        转正日期: 44892,
        部门: "总裁办"
      },
    {
        入职日期: 3356,
        姓名: "小李",
        工号: "9002",
        手机号: "13333333333",
        转正日期: 8888,
        部门: "人事部"
      }]

实现代码:

// 这里就直接用简写了:
const newarr = arr.map( item => {
       return Object.entries(item).reduce((acc, [k, v]) => (acc[mapInfo[k]] = v, acc), {})
      })
      
//打印结果
console.log(newarr);
// {timeOfEntry: 44505, username: '小张', workNumber: '9002', mobile: '13800000152', correctionTime: 44892, …}
// {timeOfEntry: 3356, username: '小李', workNumber: '9002', mobile: '13333333333', correctionTime: 8888, …}

总结:reduce方法依然这么强大