比较来自 2 个对象的键并替换
Compare keys from 2 objects and replace
我有 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'
}
我想比较这 2 个对象的键,在它们匹配的任何地方,将 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;
}, {});
好吧,简单地遍历 obj2
中的键并更新 obj1
如果迭代的 key
存在于 obj2
中的值并删除旧的 [=这个 key
的 16=]:
Object.keys(obj2).forEach(function(key){
if(obj1[key]){
obj1[obj2[key]] = obj1[key];
delete obj1[key];
}
});
演示:
var obj1 = {
Id: 'XXX123CCCVVV',
API_NAME__c: 'Joe',
API_ADDRESS__c: '123 FAKE STREET',
API_DOB__c: '6/6/1966',
Account: 'Johnson & Smith',
Position: 'CEO'
}
var obj2 = {
API_NAME__c: 'Name',
API_ADDRESS__c: 'Address',
API_DOB__c: 'Date of birth'
}
Object.keys(obj2).forEach(function(key){
if(obj1[key]){
obj1[obj2[key]] = obj1[key];
delete obj1[key];
}
});
console.log(obj1);
您可以迭代键并替换属性。
var 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' };
Object.keys(obj2).forEach(function (k) {
obj1[obj2[k]] = obj1[k];
delete obj1[k];
});
console.log(obj1);
作为替代方案,您可以生成一个新对象。
var 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' },
obj3 = Object.assign(...Object.keys(obj1).map(k => ({ [obj2[k] || k]: obj1[k] })));
console.log(obj3);
第三个对象...
var 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' },
obj3 = {};
Object.keys(obj1).forEach(function (k) {
if (k in obj2) {
obj3[obj2[k]] = obj1[k];
delete obj1[k];
}
});
console.log(obj1);
console.log(obj3);
我有 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'
}
我想比较这 2 个对象的键,在它们匹配的任何地方,将 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;
}, {});
好吧,简单地遍历 obj2
中的键并更新 obj1
如果迭代的 key
存在于 obj2
中的值并删除旧的 [=这个 key
的 16=]:
Object.keys(obj2).forEach(function(key){
if(obj1[key]){
obj1[obj2[key]] = obj1[key];
delete obj1[key];
}
});
演示:
var obj1 = {
Id: 'XXX123CCCVVV',
API_NAME__c: 'Joe',
API_ADDRESS__c: '123 FAKE STREET',
API_DOB__c: '6/6/1966',
Account: 'Johnson & Smith',
Position: 'CEO'
}
var obj2 = {
API_NAME__c: 'Name',
API_ADDRESS__c: 'Address',
API_DOB__c: 'Date of birth'
}
Object.keys(obj2).forEach(function(key){
if(obj1[key]){
obj1[obj2[key]] = obj1[key];
delete obj1[key];
}
});
console.log(obj1);
您可以迭代键并替换属性。
var 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' };
Object.keys(obj2).forEach(function (k) {
obj1[obj2[k]] = obj1[k];
delete obj1[k];
});
console.log(obj1);
作为替代方案,您可以生成一个新对象。
var 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' },
obj3 = Object.assign(...Object.keys(obj1).map(k => ({ [obj2[k] || k]: obj1[k] })));
console.log(obj3);
第三个对象...
var 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' },
obj3 = {};
Object.keys(obj1).forEach(function (k) {
if (k in obj2) {
obj3[obj2[k]] = obj1[k];
delete obj1[k];
}
});
console.log(obj1);
console.log(obj3);