有没有办法让这行代码始终正常工作,而不会抛出TypeError:Cannot read property 'Whatever' of undefined
?
var MyArray = [];
MyArray[StringVariableName][StringVariableName2].push("whatever");
有没有办法让这行代码始终正常工作,而不会抛出TypeError:Cannot read property 'Whatever' of undefined
?
var MyArray = [];
MyArray[StringVariableName][StringVariableName2].push("whatever");
试试这个:
var MyArray = [];
MyArray[StringVariableName] = MyArray[StringVariableName] || [];
MyArray[StringVariableName][StringVariableName2] = MyArray[StringVariableName][StringVariableName2] || [];
MyArray[StringVariableName][StringVariableName2].push("whatever");
(MyArray[StringVariableName][StringVariableName2] || (MyArray[StringVariableName][StringVariableName2] = [])).push("whatever");
var a = [];
a['key'] = 'something';
console.log(a); //Gives []
我认为这在概念上是错误的,所以你应该使用对象来保存这样一对数据,而不是使用数组。看看这个例子:
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");
myObject[str1][str2]
在这里是一个数组而不是一个对象。 - Sachin Jain你可以使用字面量语法来设置你想要的东西:
var myObj = {
StringVariableName: {
StringVariableName2: []
}
};
myObj.StringVariableName.StringVariableName2.push("whatever");
在不出现错误的情况下进行检查:
这段代码片段允许您检查链接对象是否存在。
var x;
try{x=MyArray[name1][name2][name3][name4]}catch(e){}
!x||(x.push('whatever'));
来自
https://dev59.com/eXI-5IYBdhLWcg3wqqXh#21353032
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
对于数组,只需进行简单的更改即可使用两种方式。将{}
替换为[]
如果您有任何问题,请随时提问。
MyArray = MyArray || [];
- Cory Danielson