【发布时间】:2019-08-13 20:34:15
【问题描述】:
我知道还有一些关于这个主题的其他帖子,但它们似乎没有解决我的问题:link。
我希望能够动态获取对象中特定属性的名称,以便我可以使用它在另一个对象中创建新的属性名称。例如,我将从foo 获取属性名称startMin(如下面的代码所示),然后在其末尾添加文本(如startMin + Suffix)以创建新的属性名称。我怎样才能做到这一点?
相关说明:我已经弄清楚如何使用foo[Object.keys(foo)[0]] 获取属性值。虽然这可行,但我不确定为什么 Object.keys 在这种情况下会获取属性值,因为我发现的示例表明 Object.keys 应该获取属性名称而不是属性值。我很想知道为什么?
我已经包含了 pusdo 代码foo[Object.returnObjectName(foo)[0]] + 'Cal',我希望在其中动态创建名称。当然,它不起作用。
var foo = {
startMin: 1000
};
var fooResults = {
// the property name here is psudo code
foo[Object.returnObjectName(foo)[0]] + 'Cal': foo[Object.keys(foo)[0]]
}
console.log('startMinCal: ' + fooResults.startMinCal) // This should log "1000" but won't until the object name inside `fooResults` is created correctly.
//
console.log(Object.keys(foo)); // I believe this gests the property name, but it exists inside an array, so won't work as a new property name
console.log(foo[Object.keys(foo)[0]]); // this gets the property value as expected.
更新的工作代码:
var foo = {
startMin: 1000,
startMax: 3000
};
var fooResults = {
[Object.keys(foo)[0] + 'Cal']: foo[Object.keys(foo)[0]],
[Object.keys(foo)[1] + 'Cal']: foo[Object.keys(foo)[1]]
}
console.log('startMinCal: ' + fooResults.startMinCal)
console.log('startMaxCal: ' + fooResults.startMaxCal)
【问题讨论】:
-
不太确定您要达到的目标。这个
(obj, suffix) => Object.keys(obj).reduce((ac, k) => ({ ...ac, [k+ suffix]: obj[k] }), {})可以用{a: 1, b:2}和'x'创建{ax: 1, bx: 2}
标签: javascript object properties