Javascript 通过键和值(js)从另一个对象创建新对象
我有一个非常奇怪的任务要完成。基本上我有这样的物体:Javascript 通过键和值(js)从另一个对象创建新对象,javascript,arrays,object,Javascript,Arrays,Object,我有一个非常奇怪的任务要完成。基本上我有这样的物体: { a: 'abc', key1: 'someKeyOne', key2: 'someKeyTwo', value1: 'someValueOne', value2: 'someValueTwo', yetAnotherProperty: 'dadjsa' } 我的目标是从作为键和值的属性创建新对象,因此新对象将是: { someKeyOne: 'someValueOne', someKeyTwo
{
a: 'abc',
key1: 'someKeyOne',
key2: 'someKeyTwo',
value1: 'someValueOne',
value2: 'someValueTwo',
yetAnotherProperty: 'dadjsa'
}
我的目标是从作为键和值的属性创建新对象,因此新对象将是:
{
someKeyOne: 'someValueOne',
someKeyTwo: 'someValueTwo',
}
在对象中可以有许多“非键”或“非值”属性,但keyX
和valueX
的数量始终相同。我尝试使用Object.keys
并检查key是否包含key,然后检查value,但我无法从中创建新对象
有什么建议吗?您可以使用Object.entries
获取原始对象的键/值对。过滤键类似于“keyX”的键(使用正则表达式),并从对象中获取相应的“valueX”值。将键/值对映射到此新对。最后使用对象从这些对中创建一个对象。fromEntries
:
让obj={a:'abc',key1:'someKeyOne',key2:'someKeyTwo',value1:'someValueOne',value2:'someValueTwo',yetAnotherProperty:'dadjsa'};
让result=Object.fromEntries(
Object.entries(obj.filter)([k])=>/^key\d+$/.test(k))
.map(([k,v])=>[v,obj[“值”+k.slice(3)])
);
控制台日志(结果)
您可以使用Object.entries
获取原始对象的键/值对。过滤键类似于“keyX”的键(使用正则表达式),并从对象中获取相应的“valueX”值。将键/值对映射到此新对。最后使用对象从这些对中创建一个对象。fromEntries
:
让obj={a:'abc',key1:'someKeyOne',key2:'someKeyTwo',value1:'someValueOne',value2:'someValueTwo',yetAnotherProperty:'dadjsa'};
让result=Object.fromEntries(
Object.entries(obj.filter)([k])=>/^key\d+$/.test(k))
.map(([k,v])=>[v,obj[“值”+k.slice(3)])
);
控制台日志(结果)
keyX和keyX,我想你是指keyX和Valuex为什么不能从中创建一个新对象?keyX和keyX,我想你是指keyX和Valuex为什么不能从中创建一个新对象?很遗憾,我不能使用object.fromEntries,因为项目中的ES版本:(见我的答案的补充。aa和最后一个,我很抱歉!如果我们想逆转这个过程怎么办?因此我们有了我们的目标,并想用形式key1、value1、key2等将其取回。你不应该问后续问题。你应该首先尝试,当你无法实现时,问一个适当的新问题,展示你的尝试。但好的,我补充道这是答案的一个片段。你欠我的。;-)很抱歉@trincot,只是试图在Object.assign({},…
中的最后一个内使用扩展语法。可能吗?可能更短更清晰,我猜很遗憾,我无法使用Object.fromEntries,因为project中的ES版本:(见我的答案的补充。aa和最后一个,我很抱歉!如果我们想逆转这个过程怎么办?因此我们有了我们的目标,并想用形式key1、value1、key2等将其取回。你不应该问后续问题。你应该首先尝试,当你无法实现时,问一个适当的新问题,展示你的尝试。但好的,我补充道这是答案的一个片段。你欠我的。;-)很抱歉@trincot,只是试图在Object.assign({},.
中的最后一个内使用扩展语法。可能吗?我想可能更短更清晰