如何创建具有动态属性名称的对象[重复]

Posted

技术标签:

【中文标题】如何创建具有动态属性名称的对象[重复]【英文标题】:How to create an object with dynamic property names [duplicate] 【发布时间】:2017-04-06 09:10:49 【问题描述】:

所以,我想要一个具有动态属性名称的对象,从数组中检索。这是我迄今为止尝试过的:

var fruits = ;

var props = ['orange', 'apple', 'banana'];

for (var i = 0; i < props.length; i++) 
  fruits.props[i] = 'Juice';

我的对象应该是这样的:

fruits  orange: 'Juice', apple: 'Juice', banana: 'Juice' ;

但我得到了错误:

未捕获的类型错误:无法设置 undefined(...) 的属性“0”

我做错了什么?

编辑:

不是因为问题标题相似,问题本身也必须如此。这个问题与695050 不同,因为我没有从 DOM 中检索我的属性名称。我正在尝试循环一个数组,但在使用括号表示法时往往会引起混淆。

【问题讨论】:

fruits[props[i]] = 'Juice'; 【参考方案1】:

在您的代码中,fruits.props[i] = 'Juice'; 会尝试设置 props 属性的第 0 个索引值,其中属性为 undefined 并导致错误。

使用bracket notation 使用字符串分配对象属性。

var fruits = ;

var props = ['orange', 'apple', 'banana'];

for (var i = 0; i < props.length; i++) 
  fruits[props[i]] = 'Juice';
  //----^^^^^^^^^^-----


console.log(fruits);

【讨论】:

【参考方案2】:

fruits.props[i] = 'Juice';

需要是:fruits[props[i]] = 'Juice';

因为使用点表示法,您不能使用动态属性名称,但使用括号表示法,该属性应为字符串,并且该字符串可以是文字或动态获取的值。

【讨论】:

赞成括号符号解释。【参考方案3】:

您需要括号中的密钥,阅读更多关于property accessors的信息。

属性访问器通过使用点表示法或方括号表示法提供对对象属性的访问。

语法

object.property
object["property"]

var fruits = ;

var props = ['orange', 'apple', 'banana'];

for (var i = 0; i < props.length; i++) 
    fruits[props[i]] = 'Juice';
    //    ^        ^


console.log(fruits);

【讨论】:

以上是关于如何创建具有动态属性名称的对象[重复]的主要内容,如果未能解决你的问题,请参考以下文章

检查对象是不是具有属性[重复]

如何删除重复结果并合并在 mySQL 查询中具有相似属性的对象?

List<T> orderby 的动态链接 [重复]

如何检查对象数组是不是具有重复的属性值?

按数据名称属性查找 div [重复]

如何将具有重复属性的元组组合成一个元组?