通过其键和值(js)来自另一个对象的新对象[重复]
Posted
技术标签:
【中文标题】通过其键和值(js)来自另一个对象的新对象[重复]【英文标题】:New object from another object by its key and values (js) [duplicate] 【发布时间】:2021-01-16 08:25:07 【问题描述】:我有一个非常奇怪的任务要完成。基本上我有这样的对象:
a: 'abc',
key1: 'someKeyOne',
key2: 'someKeyTwo',
value1: 'someValueOne',
value2: 'someValueTwo',
yetAnotherProperty: 'dadjsa'
我的目标是从作为键和值的属性创建新对象,因此新对象将是:
someKeyOne: 'someValueOne',
someKeyTwo: 'someValueTwo',
在对象中可以有许多“非键”或“非值”属性,但keyX
和valueX
的数量总是相同的。我尝试使用 Object.keys
并检查是否键 includes
键,然后是值,但我无法从中创建新对象...
有什么建议吗?
【问题讨论】:
keyX 和 keyX,我想你的意思是 keyX 和 valueX 为什么不能从中创建一个新对象? 【参考方案1】:您可以使用Object.entries
获取原始对象的键/值对。过滤键类似于“keyX”的那些(使用正则表达式),并从对象中获取相应的“valueX”值。将键/值对映射到这个新对。最后用Object.fromEntries
从这些对中创建一个对象:
let obj = a: 'abc',key1: 'someKeyOne',key2: 'someKeyTwo',value1: 'someValueOne',value2: 'someValueTwo',yetAnotherProperty: 'dadjsa';
let result = Object.fromEntries(
Object.entries(obj).filter(([k]) => /^key\d+$/.test(k))
.map(([k, v]) => [v, obj["value" + k.slice(3)]])
);
console.log(result);
如果您不支持Object.fromEntries
,您可以使用Object.assign
,您可以为每个新对添加一个参数。在这种情况下,这样的一对必须表示为一个(小)对象,只有一个键:
let obj = a: 'abc',key1: 'someKeyOne',key2: 'someKeyTwo',value1: 'someValueOne',value2: 'someValueTwo',yetAnotherProperty: 'dadjsa';
let result = Object.assign(,
...Object.entries(obj).filter(([k]) => /^key\d+$/.test(k))
.map(([k, v]) => ( [v]: obj["value" + k.slice(3)] ))
);
console.log(result);
反之,请执行以下操作:
let obj = someKeyOne: 'someValueOne', someKeyTwo: 'someValueTwo';
let result = Object.fromEntries(
Object.entries(obj).flatMap(([k, v], i) =>
[[`key$i+1`, k], [`value$i+1`, v]]
)
);
console.log(result);
同样使用Object.assign
而不是Object.fromEntries
:
let obj = someKeyOne: 'someValueOne', someKeyTwo: 'someValueTwo';
let result = Object.assign(,
...Object.entries(obj).map(([k, v], i) => (
["key" + (i+1)]: k,
["value" + (i+1)]: v
))
);
console.log(result);
【讨论】:
不幸的是,由于项目中的 ES 版本,我无法使用 Object.fromEntries :( 查看我的答案。 aaand 最后一个,我很抱歉!如果我们想逆转这个过程怎么办?所以我们有了我们的对象,并希望以 key1、value1、key2 等形式将其取回...... 您不应该提出后续问题。您应该首先尝试,当您无法实现时,请提出一个适当的新问题,展示您的尝试。但是好的,我在这个答案中添加了一个 sn-p 。你欠我。 ;-) 很抱歉@trincot,只是想以某种方式在Object.assign(, ....
的最后一个语法中使用扩展语法,这可能吗?我猜它可能更短更清晰以上是关于通过其键和值(js)来自另一个对象的新对象[重复]的主要内容,如果未能解决你的问题,请参考以下文章