使用 lodash 映射键或任何其他 javascript 方法 (NodeJs) 动态更改对象键
Posted
技术标签:
【中文标题】使用 lodash 映射键或任何其他 javascript 方法 (NodeJs) 动态更改对象键【英文标题】:Dynamically changing object keys with lodash map keys or any other javascript methods(NodeJs) 【发布时间】:2018-05-31 16:13:00 【问题描述】:这是我的 json 对象:
excels:
[ field1: 'Mohamed',
field2: '123456789',
field3: 'Sameer',
field4: 'Chennai',
field5: 'Chennai',
field6: 'Asia',
field7: '11111',
field8: '10-10-1990',
field9: 'sameer@gmail.com',
field1: 'Ganesh',
field2: '987654321',
field3: 'Pandiyan',
field4: 'Chennai',
field5: 'Chennai',
field6: 'Asia',
field7: '11111',
field8: '10-10-1990',
field9: 'ganesh@gmail.com' ],
header:
'1': 'firstName',
'2': 'gsm',
'3': 'lastName',
'4': 'street',
'5': 'city',
'6': 'region',
'7': 'postcode',
'8': 'dob',
'9': 'email'
我想把上面的json做成这样:
[firstName:Mohamed;gsm:123456789;lastName:Sameer;street:Chennai;city:Chennai;region:Asia;postcode:11111;dob:10-10-1990;email:sameer@gmail.com,firstName:Ganesh;gsm:987654321;lastName:Pandiyan;street:Chennai;city:Chennai;region:Asia;postcode:11111;dob:10-10-1990;email:ganesh@gmail.com]
但有一个条件, 如果我的 json 标头对象看起来像:
header:
'1': 'lastName',
'2': 'gsm',
'3': 'firstName',
'4': 'street',
'5': 'city',
'6': 'region',
'7': 'postcode',
'8': 'dob',
'9': 'email'
P.S:我正在更改名字和姓氏顺序
我想把上面的json做成这样:
[firstName:Sameer;gsm:123456789;lastName:Mohamed;street:Chennai;city:Chennai;region:Asia;postcode:11111;dob:10-10-1990;email:sameer@gmail.com,firstName:Pandiyan;gsm:987654321;lastName:Ganesh;street:Chennai;city:Chennai;region:Asia;postcode:11111;dob:10-10-1990;email:ganesh@gmail.com]
查看名字和姓氏
如何做到这一点?任何js方法都可以做到这一点吗?
【问题讨论】:
完全有可能。但是您尝试过什么? 我得到这个 json,但我不知道如何制作这样的结构,所以只有我在寻找解决方案? 看看reduce对象,使用空对象作为statrting值,迭代你的header对象并从你的excel数组的每个条目中建立你的结果 @ilmrions 你能贴一些代码吗!这对我真的很有帮助:) 【参考方案1】:您可以通过执行一些简单的数组/对象操作来做到这一点,
var result = source.excels.map((details) =>
Object.keys(details).reduce((a, b) =>
(a[source.header[b.replace('field', '')]] =
details[b], a), ));
console.log(result);
// result would contain [firstName:'Mohamed',gsm:123456789, ......
DEMO
在这里学习Array#map
、Array#reduce
、Object#keys
、Arrow functions
。
注意:在交易对象时,我们不能依赖订单。这就是我依赖密钥字符串的原因。
【讨论】:
***.com/questions/47883754/…帮帮我【参考方案2】:您可以使用本机 .map 和 .reduce 方法来做到这一点:
const persons =
excels:
[ field1: 'Mohamed',
field2: '123456789',
field3: 'Sameer',
field4: 'Chennai',
field5: 'Chennai',
field6: 'Asia',
field7: '11111',
field8: '10-10-1990',
field9: 'sameer@gmail.com',
field1: 'Ganesh',
field2: '987654321',
field3: 'Pandiyan',
field4: 'Chennai',
field5: 'Chennai',
field6: 'Asia',
field7: '11111',
field8: '10-10-1990',
field9: 'ganesh@gmail.com' ],
header:
'1': 'firstName',
'2': 'gsm',
'3': 'lastName',
'4': 'street',
'5': 'city',
'6': 'region',
'7': 'postcode',
'8': 'dob',
'9': 'email'
const personKeys = Object.keys(persons.header)
const formattedPersons = persons.excels.map((p) =>
const formattedPerson = personKeys.reduce((newPerson, currentKey) =>
newPerson[persons.header[currentKey]] = p[`field$currentKey`]
return newPerson
, )
return formattedPerson;
)
【讨论】:
以上是关于使用 lodash 映射键或任何其他 javascript 方法 (NodeJs) 动态更改对象键的主要内容,如果未能解决你的问题,请参考以下文章