我的整个代码示例位于jsFiddle:http://jsfiddle.net/rEhvt/下面。
我正在尝试alert()
我的多维JavaScript对象。如果我alert()
对象的单个属性 - 它可以工作。例如:
alert(votes['77777'].stay);
但是,如果我尝试alert()
整个对象,那么我会得到很多NULL
或空白。我尝试了以下方法:
alert(JSON.stringify(votes));//returns lots of NULLs
alert(votes.join('\n'));//returns lots of blanks
我的意图是最终使用
将对象发送到localStoragelocalStorage['votes']=JSON.stringify(votes);
并使用
检索它retrievedVotes=JSON.parse(localStorage['votes'])
但是,我想首先能够看到对象结构。这是我第一次尝试使用JavaScript理解多维对象,因此非常感谢您提供的任何帮助!下面是我的所有代码,也在jsFiddle上:http://jsfiddle.net/rEhvt/。
//Movie #1
var movieID = 55555;
var stay = 'yes';
var votes = [];
votes[movieID]=[];
votes[movieID].stay = stay;
var scenes = 1;
votes[movieID].scenes = scenes;
//Movie #2
var movieID = 77777;
var stay = 'no';
var votes = [];
votes[movieID]=[];
votes[movieID].stay = stay;
var scenes = 0;
votes[movieID].scenes = scenes;
//Alert Single Item from votes
alert(votes['77777'].stay);
//Alert entire object
alert(JSON.stringify(votes));//returns NULLs
//Alert entire object
alert(votes.join('\n'));//returns lots of blanks
答案 0 :(得分:1)
var movieID = 55555;
votes[movieID]
这为该电影设定了55555票数!这就是为什么你有大量的空白。同样适用于77777。
如果你这样做
console.log(votes.length);
你会看到这个结果:
77778
另一个问题是,当你通过var votes = [];
您想要创建对象而不是数组。这是使用花括号{ }
而不是[ ]
答案 1 :(得分:1)
定义{}
变量时,您可以使用[]
代替votes
。
当你定义数组并通过索引设置一个值时,如果它之前没有元素,它将用空值填充它。例如代码:
var arr = [];
arr[5] = 0;
alert(JSON.stringify(arr));
将提供[null,null,null,null,null,0]
。
答案 2 :(得分:1)
使用对象{}
而不是数组[]
...设置votes[7777]
将重新索引数组以容纳7,778个元素...包含大量未定义元素(其中JSON.stringify()
将转换为null
)。
另外,您要在数组上设置命名属性:
votes[movieID]=[];
votes[movieID].stay = stay;
这是使用对象(fiddle)的功能样本:
var votes = {
// Movie #1
'55555': {
stay: 'yes',
scenes: 1,
outtakes: 0,
enhanced: 0,
teaser: 0
},
// Movie #2
'77777': {
stay: 'no',
scenes: 0,
outtakes: 0,
enhanced: 0,
teaser: 0
}
};
console.log(votes[77777].stay);
console.log(votes);
您提供的代码(fiddle)中的一对一更改:
//Movie #1
var movieID = 55555;
var stay = 'yes';
var votes = {}; // changed to {}
votes[movieID]= {}; // changed to {}
votes[movieID].stay = stay;
var scenes = 1;
votes[movieID].scenes = scenes;
var outtakes = 0;
votes[movieID].outtakes = outtakes;
var enhanced = 0;
votes[movieID].enhanced = enhanced;
var teaser = 0;
votes[movieID].teaser = teaser;
//Movie #2
var movieID = 77777;
var stay = 'no';
//var votes = []; removed
votes[movieID]= {}; // changed to {}
votes[movieID].stay = stay;
var scenes = 0;
votes[movieID].scenes = scenes;
var outtakes = 0;
votes[movieID].outtakes = outtakes;
var enhanced = 0;
votes[movieID].enhanced = enhanced;
var teaser = 0;
votes[movieID].teaser = teaser;
//Alert Single Item from votes
alert(votes['77777'].stay);
//Alert entire object/array
alert(JSON.stringify(votes));//returns NULLs
答案 3 :(得分:1)
您正在使用array
,但您需要的是对象。
更改
var votes = [];
votes[movieID]=[];
到
var votes = {};
votes[movieID]={};
等等。
答案 4 :(得分:1)
alert
不是调试工具您说您希望“首先能够看到对象结构”,因此您应该使用适当的开发人员工具。您的浏览器可能有这些,按 F12 。如果您使用Firefox,请安装Firebug。
然后你可以使用像console.log(votes)
这样的命令,整个东西将被输出到开发者控制台,你可以像用树一样用树来导航它。
如果你真的想递归.toString()
每个对象然后alert
它,那么它是可能的,但我看不出有任何理由这样做。