简体   繁体   English

如何比较两个对象并更改键名?

[英]How to compare two objects and change the key name?

compare headerObj(field_key) and dataObj(key) and form the result with label from headerObj比较 headerObj(field_key) 和 dataObj(key) 并用来自 headerObj 的 label 形成结果

 const headerObject = [{ label: 'Code', field_key: 'code' }, { label: 'Worked Accounts', field_key: 'workedAccounts' }, { label: 'Contactable Accounts', field_key: 'contactableAccounts' }, { label: 'Taken By', field_key: 'takenBy' }, ]; const dataObj = [{ "code": "ABCD", "takenBy": "", "workedAccounts": 4, "contactableAccounts": 3, }, { "takenBy": "Ram", "workedAccounts": 2, "contactableAccounts": 1, }, { "takenBy": "krish", "workedAccounts": 2, "contactableAccounts": 2, }, { "code": "XYZ", "takenBy": "", "workedAccounts": 9, "contactableAccounts": 4, }, { "Taken By": "Jack", "workedAccounts": 5, "contactableAccounts": 0, }, { "Taken By": "krish", "workedAccounts": 4, "contactableAccounts": 4, } ]; const result = [{ "Code": "ABCD", "Taken By": "", "Worked Accounts": 4, "Contactable Accounts": 3, }, { "Taken By": "Ram", "Worked Accounts": 2, "Contactable Accounts": 1, }, { "Taken By": "krish", "Worked Accounts": 2, "Contactable Accounts": 2, }, { "Code": "XYZ", "Taken By": "", "Worked Accounts": 9, "Contactable Accounts": 4, }, { "Taken By": "Jack", "Worked Accounts": 5, "Contactable Accounts": 0, }, { "Taken By": "krish", "Worked Accounts": 4, "Contactable Accounts": 4, } ]; result = filter(headerObj, el => Object.keys(dataObj)?.filter(ele => ele === el.field_key && {[el.field.key]: ele[field.key));

 const headerArray = [ { label: 'Code', field_key: 'code', }, { label: 'Worked Accounts', field_key: 'workedAccounts', }, { label: 'Contactable Accounts', field_key: 'contactableAccounts', }, { label: 'Taken By', field_key: 'takenBy', }, ]; // This is how your header array should be structured // in the first place const headerMap = headerArray.reduce((acc, { label, field_key }) => { acc[field_key] = label; return acc; }, {}); const dataArray = [ { code: 'ABCD', takenBy: '', workedAccounts: 4, contactableAccounts: 3, }, { takenBy: 'Ram', workedAccounts: 2, contactableAccounts: 1, }, { takenBy: 'krish', workedAccounts: 2, contactableAccounts: 2, }, { code: 'XYZ', takenBy: '', workedAccounts: 9, contactableAccounts: 4, }, { takenBy: 'Jack', workedAccounts: 5, contactableAccounts: 0, }, { takenBy: 'krish', workedAccounts: 4, contactableAccounts: 4, }, ]; const result = dataArray.map((obj) => { return Object.fromEntries(Object.keys(obj).map((key) => [headerMap[key], obj[key]])); }); console.log(result);

You have and errors in your example objects, but I think this is what you need:您的示例对象中有错误,但我认为这就是您所需要的:

const map = headerObject.reduce((acc, item) => ({...acc, [item.field_key]: item.label}), {});

dataObj.reduce((acc, item) => [
  ...acc,
  Object.keys(item).reduce((curr, key) => ({ ...curr, [map[key]]: item[key] }), {})
], []);

at first you need create a map for easy compare keys and values and then map it.首先,您需要创建一个 map 以便轻松比较键和值,然后创建 map。 Hope this helps.希望这可以帮助。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM