Javascript 使用json.js字符串化多维数组的问题
我对Javascript 使用json.js字符串化多维数组的问题,javascript,jquery,json,Javascript,Jquery,Json,我对.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+')').ht
.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)
})
我做错了什么?修复:
替换问题[i]=新数组()代码>带有问题[i]={}
(或者=newobject();
如果您确实想要这种“丑陋”的语法)
说明:
JavaScript中的数组类似于C语言中的数组:它们只支持区间[0,array.length)
中的整数索引
对于关联数组,您使用的对象是使用object literal{}
创建的。首先,您的“questions”变量似乎是一个真实数组。但是,您在数组中放置的不是真实数组,它们只是具有属性的对象
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)
});
这有点好,因为它解决了在循环的每次迭代中重新计算$('.Questions')
的丑陋问题。数组有整数键,而不是字符串
改为使用对象;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);
});
您应该使用[]
而不是new Array()
。您还应该始终使用var
关键字将循环变量设置为局部变量!i<$('.Questions')。长度
不正确。每个循环都创建一个新的jQuery对象。如果您的元素是.Questions
的后代,请使用$('.Questions')。每个(回调)
谢谢,现在看起来很明显!@Coronier:没问题。JS中的数组和对象经常混淆。这救了我的命,真的。谢谢
$('#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);
});
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);
});
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);
});