2017-07-29 141 views
1

我keepy得到类型错误:testsession.testset [0] .athletes是未定义 - 我已经尝试许多不同的方式,是它不可能有对象的数组的数组JavaScript的嵌套阵列

var testsession = {}; 
 
var testsetname = {}; 
 
var testset = []; 
 
testsession.testsetname = testsetname; 
 
testsession.testsetname = "week9"; 
 
testsession.testset = testset; 
 
testsession.testset.push("400M"); 
 
testsession.testset.push("800M"); 
 

 
var athletes = []; 
 
var Time = "49.2"; 
 
var AthleteID = "a92"; 
 
var athlete = { "AthleteID": AthleteID, "Time": Time}; 
 
//console.log(pointer); 
 
testsession.testset[0].athletes = athletes; 
 
testsession.testset[0].athletes.push(athlete) 
 
console.log(testsession.testset[0].athletes[0]);

回答

1

testset [0]是一个字符串。使其成为一个对象

var testsession = {}; 
var testsetname = {}; 
var testset = []; 
testsession.testsetname = testsetname; 
testsession.testsetname = "week9"; 
testsession.testset = testset; 

//Earlier you pushed 400m directly which is a string hence causing the error later on 
testsession.testset.push({distance: "400M"}); 
testsession.testset.push({distance: "800M"}); 

var athletes = []; 
var Time = "49.2"; 
var AthleteID = "a92"; 
var athlete = { "AthleteID": AthleteID, "Time": Time}; 
//console.log(pointer); 
testsession.testset[0].athletes = athletes; 
testsession.testset[0].athletes.push(athlete) 
console.log(testsession.testset[0].athletes[0]); 
1

当您尝试访问testsession.testset[0]该条目是一个字符串。在访问其成员之前,您可能至少要设置testsession.testset[0] = {};

1

testsession.testset[0]是一个原始值,一个字符串。

下面的语句,因此不会造成你可能会认为它具有这样的效果:

testsession.testset[0].athletes = athletes; 

这里会发生什么?左侧的图元没有athletes属性,但JavaScript会将其强制为String对象,然后将该属性分配给该临时对象,然后该对象消失并遗忘。

所以它就像是从未发生过任务:testsession.testset[0]将保持原始值,原始值没有任何属性。

当你阅读athletes属性,同样会再次发生:JavaScript的它强制转换为String对象,才发现对象有没有athletes属性,让您得到undefined

0

我认为你是这样工作的代码。

<script > 

var testsession = {}; 
testsession.testset = []; 
testsession.testset.push({testsetname:"week9"}); 
testsession.testset[0].list = []; 

testsession.testset[0].list.push({distance:"400M"}); 
testsession.testset[0].list[0].athletes = []; 
testsession.testset[0].list[0].athletes.push({ AthleteID: "a92", Time: "49.2"}); 

testsession.testset[0].list.push({distance:"900M"}); 
testsession.testset[0].list[1].athletes = []; 
testsession.testset[0].list[1].athletes.push({ AthleteID: "a93", Time: "99.2"}); 

console.log(testsession); 

</script> 

和结果将是这样的:

"{"testset":[{"testsetname":"week9","list":[{"distance":"400M","athletes":[{"AthleteID":"a92","Time":"49.2"}]},{"distance":"900M","athletes":[{"AthleteID":"a93","Time":"99.2"}]}]}]}" 

enter image description here