[英]How to create 2nd level property with for JS object using bracketss
这是交易。 我从对象文字开始。
var prepObj = {};
然后,我将在foreach中向该对象添加属性。 基本上,最终它将看起来像这样(更大范围)。
{
34 : {
prop1: myvalue,
prop2: myvalue,
}
87 : {
prop1: myvalue,
prop2: myvalue,
}
102 : {
prop1: myvalue,
prop2: myvalue,
}
}
在整个循环中,我将为某个索引的某个属性(例如87的prop1)找到一个值,并为该对象创建它。
因此,在循环之前,我从一个空白对象开始。
然后在循环中,我想我可以做:
var index_id = 87;
var which_prop = "prop1";
var prop_value = "This is a value.";
prepObj[index_id][which_prop] = prop_value;
但是当我尝试这个时,我收到一条错误消息:
Uncaught TypeError: Cannot set property 'prop1' of undefined
我究竟做错了什么?
JavaScript不支持自动生存 。 在定义prepObj[index_id][which_prop] = prop_value
之前,必须先定义prepObj[index_id] = {}
。
这是因为最初未定义prepObj[index_id]
。 因此,您试图在prepObj[index_id]
上设置prop1
属性,该属性undefined
。 通过使prepObj[index_id]
一些定义的值可以避免这种情况。
如果您担心每次都会用新对象破坏prepObj[index_id]
,则可以通过以下任一方法测试该值是否已设置:
index_id in prepObj
测试prepObj是否已经有一个条目,其键为index_id
的值
typeof prepObj[index_id] != "undefined"
-测试prepObj[index_id]
的值是否undefined
prepObj[index_id] || {}
prepObj[index_id] || {}
-如果它不是伪造的值(如undefined
),则其值为prepObj[index_id]
; 否则将评估为一个新对象
尝试这个:
prepObj[index_id] = {};
prepObj[index_id][which_prop] = prop_value;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.