如何将一个对象的每个键重新映射到另一个对象的值? [复制]
Posted
技术标签:
【中文标题】如何将一个对象的每个键重新映射到另一个对象的值? [复制]【英文标题】:How to remap each key of one Object to the value of another? [duplicate] 【发布时间】:2020-09-26 12:29:33 【问题描述】:假设我有一个名为 data
的对象:
first: 'Zaaac',
last: 'Ezzell',
title: 'Mrs',
mail: 'oezzell0@reddit.com',
cellphone: '+444444',
phone_2: '6506679207',
address_2: 'Holmberg',
address_1: '34 Scott Center',
address_3: 'Iowa City',
address_4: 'Stephen',
address_5: 'Iowa',
country: 'United States',
zipcode: '52245'
我希望根据映射对象重命名每个键,fields
:
fields:
fieldName: 'map',
fieldValue:
first: 'first_name',
last: 'last_name',
title: 'null',
mail: 'email',
cellphone: 'cellphone',
phone_2: 'null',
address_1: 'address_line_1',
address_2: 'address_line_2',
address_3: 'null',
address_4: 'null',
address_5: 'null',
zipcode: 'null',
country: 'country'
例如,想法是在对象 A 中出现first
键的任何位置,将其重命名为first_name
。在出现last
的地方,将其重命名为last_name
等等。
我尝试了以下方法:
await data.forEach((element) =>
Object.keys(element).forEach(function(key)
console.log('Contact: ' + key + ': ' + element[key]);
Object.keys(fields['fieldValue']).forEach(function(mapKey)
if (fields['fieldValue'][mapKey] !== 'null')
key = fields['fieldValue'][mapKey];
console.log('LOG: KEY: ', key);
);
);
console.log('LOG: Element: ', element);
);
但是,生成的 Object 中的键保持不变。
预期输出:
first_name: 'Zaaac',
last_name: 'Ezzell',
title: 'Mrs',
email: 'oezzell0@reddit.com',
cellphone: '+444444',
phone_2: '6506679207',
address_line_2: 'Holmberg',
address_line_1: '34 Scott Center',
address_3: 'Iowa City',
address_4: 'Stephen',
address_5: 'Iowa',
country: 'United States',
zipcode: '52245'
【问题讨论】:
为什么await
在一个不返回任何东西(但 undefined
)的同步方法上?
问题看了两遍也不是很清楚。
下一个问题的提示:您还应该添加预期的输出。两次发布输入并没有真正的帮助。
抱歉,会的 - 感谢您的提示
【参考方案1】:
您可以获取对象的条目,然后从映射的条目中获取:
var mapObj= fieldName: 'map', fieldValue: first: 'first_name', last: 'last_name', title: 'null', mail: 'email', cellphone: 'cellphone', phone_2: 'null', address_1: 'address_line_1', address_2: 'address_line_2', address_3: 'null', address_4: 'null', address_5: 'null', zipcode: 'null', country: 'country' ;
var obj= first: 'Zaaac', last: 'Ezzell', title: 'Mrs', mail: 'oezzell0@reddit.com', cellphone: '+444444', phone_2: '6506679207', address_2: 'Holmberg', address_1: '34 Scott Center', address_3: 'Iowa City', address_4: 'Stephen', address_5: 'Iowa', country: 'United States', zipcode: '52245' ;
var result = Object.fromEntries(Object.entries(obj).map(([k,v])=>([mapObj.fieldValue[k] == "null" ? k : mapObj.fieldValue[k] ,v])));
console.log(result);
【讨论】:
完美,非常感谢@gorak以上是关于如何将一个对象的每个键重新映射到另一个对象的值? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何将数组内的对象和每个对象相乘,获取一个或多个键并减少它们的值?
JavaScript:如何映射两个对象以获得将第一个对象的 ID 映射到另一个对象的名称的输出?