Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用json.js字符串化多维数组的问题_Javascript_Jquery_Json - Fatal编程技术网

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);
});