如果存在则推送到javascript数组,如果不存在则先创建它

时间:2014-02-18 16:07:19

标签: javascript arrays object

这条线是否有办法始终工作而不是抛出TypeError: Cannot read property 'Whatever' of undefined

var MyArray = [];
MyArray[StringVariableName][StringVariableName2].push("whatever");

5 个答案:

答案 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");