I have problems with .stringify()
, but I think my JavaScript array must be wrong, here's my code:
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)
})
The stringJSON var returns :
[[]]
What am I doing wrong?
Arrays have integer keys, not strings.
Use an object instead; objects in JS sort of look like associative arrays:
Setting
questions[i]
to{}
is the key.You can shorten this syntax:
Fix:
Replace
questions[i]=new Array();
withquestions[i] = {};
(or= new Object();
if you really want this "ugly" syntax).Explanation:
Arrays in JavaScript are like arrays in languages like C: They only support integer indexes in the interval
[0, array.length)
.For associative arrays, you use objects which are created using the object literal
{}
.First, your "questions" variable appears to be intended as a real array. What you're putting inside the array, however, are not real arrays — they're just objects with properties.
(Note that I also added a
var
for the "i" loop variable - important!)Now, as to why the thing is coming up empty, well, I suspect it's because
$('.Questions')
is coming up empty.Oh and also, this is something you could use the jQuery ".map()" API for:
That's a little nicer because it gets around the ugly problem of re-evaluating
$('.Questions')
on every iteration of the loop.