问题使用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')
的丑陋问题。