问题使用json.js对多维数组进行字符串化

我有.stringify()问题,但我认为我的JavaScript数组一定是错的,这是我的代码:

 var questions = new Array(); $('#Valid').hover(function(){ for (i=0;i < $('.Questions').length;i++){ questions[i]=new Array(); questions[i]['numero']=$('.Numero:eq('+i+')').html(); questions[i]['question']=$('.ItemInput:eq('+i+')').val(); questions[i]['variable']=$('.VarName:eq('+i+')').val(); } var stringJSON=JSON.stringify(questions) alert (stringJSON) }) 

stringJSON var返回:

 [[]] 

我究竟做错了什么?

数组有整数键,而不是字符串。

改为使用对象; JS中的对象看起来像关联数组:

 var questions = new Array(); $('#Valid').hover(function(){ for (var i=0;i < $('.Questions').length;i++){ questions[i]={}; questions[i]['numero']=$('.Numero:eq('+i+')').html(); questions[i]['question']=$('.ItemInput:eq('+i+')').val(); questions[i]['variable']=$('.VarName:eq('+i+')').val(); } var stringJSON=JSON.stringify(questions); alert(stringJSON); }); 

questions[i]设置为{}是关键。

您可以缩短此语法:

 var questions = new Array(); $('#Valid').hover(function(){ for (var i=0;i < $('.Questions').length;i++){ questions[i] = { numero: $('.Numero:eq('+i+')').html(), question: $('.ItemInput:eq('+i+')').val(), variable: $('.VarName:eq('+i+')').val() }; } var stringJSON=JSON.stringify(questions); alert(stringJSON); }); 

固定:

替换questions[i]=new Array(); questions[i] = {}; (或= new Object();如果你真的想要这个“丑陋”的语法)。

说明:

JavaScript中的数组就像C语言中的数组一样:它们只支持区间[0, array.length)中的整数索引。

对于关联数组,可以使用使用对象文字{}创建的对象。

首先,您的“问题”变量似乎是一个真正的数组。 但是,你在数组中放置的并不是真正的数组 – 它们只是具有属性的对象。

 var questions = []; $('#Valid').hover(function(){ for (var i=0;i < $('.Questions').length;i++){ questions[i] = { 'numero': $('.Numero:eq('+i+')').html(), 'question': $('.ItemInput:eq('+i+')').val(), 'variable': $('.VarName:eq('+i+')').val() }; } var stringJSON=JSON.stringify(questions) alert (stringJSON) }); 

(注意我还为“i”循环变量添加了一个var - 很重要!)

现在,至于为什么事情变得空洞,好吧,我怀疑这是因为$('.Questions')空洞。

哦,而且,这是你可以使用jQuery“.map()”API:

  $('#Valid').hover(function() { questions = $('.Questions').map(function(i, q) { return { 'numero': $('.Numero:eq('+i+')').html(), 'question': $('.ItemInput:eq('+i+')').val(), 'variable': $('.VarName:eq('+i+')').val() }; }).get(); var stringJSON = JSON.stringify(questions); alert(stringJSON); }); 

这有点好,因为它解决了在循环的每次迭代中重新评估$('.Questions')的丑陋问题。