我遇到.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返回:
[[]]
我做错了什么?
答案 0 :(得分:18)
数组有整数键,而不是字符串。
改为使用对象; 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);
});
答案 1 :(得分:6)
将questions[i]=new Array();
替换为questions[i] = {};
(或= new Object();
,如果您真的需要这种“丑陋”的语法)。
JavaScript中的数组就像C语言中的数组一样:它们只支持[0, array.length)
区间内的整数索引。
对于关联数组,可以使用使用对象文字{}
创建的对象。
答案 2 :(得分:1)
首先,您的“问题”变量似乎是用作真正的数组。然而,你在里面数组中的不是真实数组 - 它们只是具有属性的对象。
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 for:
$('#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')
的丑陋问题。