这条线是否有办法始终工作而不是抛出TypeError: Cannot read property 'Whatever' of undefined
var MyArray = [];
MyArray[StringVariableName][StringVariableName2].push("whatever");
答案 0 :(得分:13)
试试这个:
var MyArray = [];
MyArray[StringVariableName] = MyArray[StringVariableName] || [];
MyArray[StringVariableName][StringVariableName2] = MyArray[StringVariableName][StringVariableName2] || [];
MyArray[StringVariableName][StringVariableName2].push("whatever");
答案 1 :(得分:0)
我认为如果你的键不是整数,而不是首先使用数组。 在Javascript Arrays中也是对象所以这样做没有错误
var a = [];
a['key'] = 'something';
console.log(a); //Gives []
我认为它在概念上是错误的因此,您应该使用对象而不是使用Array来保存这样的数据对。见:
var myObject = myObject || {};
myObject[str1] = myObject[str1] || {};
myObject[str1][str2] = myObject[str][str2] || [];
// Now myObject[str1][str2] is an array. Do your original operation
myObject[str1][str2].push("whatever");
答案 2 :(得分:0)
您可以使用文字语法来设置,就像您拥有它们一样:
var myObj = {
StringVariableName: {
StringVariableName2: []
}
};
myObj.StringVariableName.StringVariableName2.push("whatever");
答案 3 :(得分:0)
要检查而不会收到错误:
此代码段允许您检查链接对象是否存在。
var x;
try{x=MyArray[name1][name2][name3][name4]}catch(e){}
!x||(x.push('whatever'));
来自
https://stackoverflow.com/a/21353032/2450730
在Javascript中快速创建对象链
此函数允许您使用简单的字符串创建链接对象。
function def(a,b,c,d){
c=b.split('.');
d=c.shift();//add *1 for arrays
a[d]||(a[d]={});//[] for arrays
!(c.length>0)||def(a[d],c.join('.'));
}
使用
var MyArray={};//[]
def(MyArray,'name1.name2.name3.name4');//name1+'.'+name2....
来自
https://stackoverflow.com/a/21384869/2450730
对于带有{}
的简单change.replace []
的数组也适用
如果您有任何问题,请询问。
答案 4 :(得分:0)
你甚至可以通过表达的力量,用一个班轮来做这件事。
(MyArray[StringVariableName][StringVariableName2] || (MyArray[StringVariableName][StringVariableName2] = [])).push("whatever");