编程语言
首页 > 编程语言> > javascript-比较2个对象的键并替换

javascript-比较2个对象的键并替换

作者:互联网

我有2个对象,一个包含我想要的数据,但是我也得到了一些不需要的API名称,第二个对象具有正确的名称来替换这些API名称.

但是我很难将它们换出,我不确定如何比较对象键并换出它们.

obj1 = {
        Id: 'XXX123CCCVVV',
        API_NAME__c : 'Joe',
        API_ADDRESS__c : '123 FAKE STREET',
        API_DOB__c : '6/6/1966',
        Account : 'Johnson & Smith',
        Position : 'CEO' 
    }

obj2 = {
        API_NAME__c : 'Name',
        API_ADDRESS__c : 'Address',
        API_DOB__c : 'Date of birth'
    }

我想比较这两个对象的键,并在它们匹配的任何地方,将obj2的值交换为obj1的键,因此obj1最终如下:

obj1 = {
        Id: 'XXX123CCCVVV',
        Name : 'Joe',
        Address : '123 FAKE STREET',
        Date of birth : '6/6/1966',
        Account : 'Johnson & Smith',
        Position : 'CEO' 
    }

谁能建议一种实现此目标的方法?

如果可以,我目前正在使用underscore.js.

更新

我真的很感谢下面的出色回答,但是我想知道是否有可能扩展此逻辑以产生仅包含具有新属性名称的值的第三个对象?

这样我最终得到以下结果:

obj1 = {
        Id: 'XXX123CCCVVV',
        Account : 'Johnson & Smith',
        Position : 'CEO' 
    }

obj3 = {
        Name : 'Joe',
        Address : '123 FAKE STREET',
        Date of birth : '6/6/1966',
    }

解决方法:

有趣的问题是,可以循环obj1的键,如果obj2包含该键,则将obj1中的键替换为obj2中的值:

for (let key in obj1) {
    if (obj2.hasOwnProperty(key)) {
        obj1[obj2[key]] = obj1[key]
        delete obj1[key]; //remove old entry
    }
}

或使用.reduce

let newObj = Object.keys(obj1).reduce((o, k) => {
    let newKey = obj2.hasOwnProperty(k) ? obj2[k] : k;
    o[newKey] = obj1[k];

    return o;
}, {});

演示:https://jsfiddle.net/f3vuoppf/2/

标签:properties,underscore-js,javascript,object
来源: https://codeday.me/bug/20191025/1930065.html