重新映射对象属性

3

考虑下面这个定义对象:

var map = {
  'Username':
  {
    'user-name': 'userName',
    'first-name': 'fName',
    'last-name': 'lName',
    'active': 'isActive'
  }
}

我该如何重新映射一个对象,例如这个对象:
data: 
{
   'user-name': SamN,
   'first-name': Sam,
   'last-name': Norbert,
   'active': 1
}

要获得这样的输出:
data:
{
   'userName': SamN,
   'fName': Sam,
   'lName': Norbert,
   'isActive': 1
}
2个回答

5

只需遍历属性:

for(var prop in data) {
    if(data.hasOwnProperty(prop) && prop in map.Username) {
        data[map.Username[prop]] = data[prop];
        delete data[prop];
    }
}

这会直接改变对象。如果你想创建一个新的对象,只需在一个新的空对象上设置属性。

你也可以迭代map.Username的属性。


如果我将这个放在一个函数中,JS是否支持按引用传递?还是我需要创建一个临时对象? - HyderA
@gAMBOOKa:对象总是通过引用传递。 - Felix Kling

1
const map = {
  'Username':
  {
    'user-name': 'userName',
    'first-name': 'fName',
    'last-name': 'lName',
    'active': 'isActive'
  }
}
const newObj = {};
const oldObj = { 'user-name': 'SamN', 'first-name': 'Sam', 'last-name': 'Norbert', 'active': 1 };

// Solution
Object.keys(oldObj).map((v, k) => {
    newObj[map.Username[v]] = v
})

console.log(newObj) // {userName: "user-name", fName: "first-name", lName: "last-name", isActive: "active"}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接