如何使用动态属性名称创建对象

时间:2016-11-22 15:49:10

标签: javascript

所以,我希望有一个具有动态属性名称的对象,从数组中检索。这是我到目前为止所尝试的:

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' };

但我收到了错误:

  

未捕获的TypeError:无法设置属性&#39; 0&#39;未定义的(...)

我做错了什么?

编辑:

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

3 个答案:

答案 0 :(得分:3)

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

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

&#13;
&#13;
undefined
&#13;
&#13;
&#13;

答案 1 :(得分:2)

fruits.props[i] = 'Juice';

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

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

答案 2 :(得分:2)

您需要括号中的键,详细了解property accessors

  

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

     

<强>语法

object.property
object["property"]

&#13;
&#13;
var fruits = {};

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

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

console.log(fruits);
&#13;
&#13;
&#13;