【问题标题】:How can I get the name of a property from inside an object to create a new property name?如何从对象内部获取属性名称以创建新的属性名称?
【发布时间】: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


【解决方案1】:

var foo = {
  startMin: 1000
};


//Object.keys return all the keys in an object passed as parameter

//here your wanted key is at first position
var key = Object.keys(foo)[0];

//get the value
var value = foo[key]

//append whatever suffix you want
key += 'Cal';



var fooResults = {
  //to use  content of variable as key of object put variable  in []   
  [key]: value
}


//another solution 
//create emtyy object 
var fooResults2 = {}

//use use variable name as index
fooResults2[key] = value


console.log('startMinCal: ' + fooResults.startMinCal) // This should log "1000" but won't until the object name inside `fooResults` is created correctly.

console.log('startMinCal: ' + fooResults2.startMinCal)

【讨论】:

  • Object.keys(foo) 将 foo 对象中的所有属性名称作为数组返回......Object.keys(foo)[0] 返回这些属性名称中的第一个......因此foo[Object.keys(foo)[0]] 返回值foo 对象中的那个属性
  • 这条评论,除了你的回答,帮助很大。谢谢!我更新了我的代码以显示工作版本。
猜你喜欢
  • 2022-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-02
  • 2018-11-16
  • 1970-01-01
  • 1970-01-01
  • 2017-05-21
相关资源
最近更新 更多