alert()整个多维对象

时间:2012-09-27 03:57:00

标签: javascript arrays object alert stringify

我的整个代码示例位于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

我的意图是最终使用

将对象发送到localStorage
localStorage['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

5 个答案:

答案 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它,那么它是可能的,但我看不出有任何理由这样做。