【问题标题】: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';

标签: javascript


【解决方案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);

    【讨论】:

      猜你喜欢
      • 2013-07-23
      • 1970-01-01
      • 1970-01-01
      • 2014-08-26
      • 2019-07-01
      相关资源
      最近更新 更多