Javascript数组中未定义的值

Javascript数组中未定义的值,javascript,Javascript,我试图向从html页面提取的数组中添加2个值。但是,键[0]的值总是返回未定义的,而在这种情况下,我希望返回4 <script type="text/javascript"> $(document).ready(function () { var arrayList = $("some class"); var x = new Array(); var j = 0; var k = 1; $.each(arrayList, func

我试图向从html页面提取的数组中添加2个值。但是,键[0]的值总是返回未定义的,而在这种情况下,我希望返回4

<script type="text/javascript">
  $(document).ready(function ()
  {
    var arrayList = $("some class");
    var x = new Array(); 
    var j = 0;
    var k = 1;

    $.each(arrayList, function(i,e) {

      var MyIf = $(e).text(); 
      x[j] = new Array();

      if(k == 2) {
        x[j][0] = 4; // This always returns undefined, no matter which value I assign.
      }

      if(k == 3) {
        x[j][1] = parseInt(MyIf);
      }

      if(k % 3 == 0) {
        j++;
        k = 1;
      } else {
        k++;
      }

    });
    console.log(x); // the console returns for all [0] "undefined"
  });
</script>

$(文档).ready(函数()
{
var arrayList=$(“某类”);
var x=新数组();
var j=0;
var k=1;
$.each(数组列表,函数(i,e){
var MyIf=$(e).text();
x[j]=新数组();
如果(k==2){
x[j][0]=4;//无论我分配哪个值,它总是返回未定义的值。
}
如果(k==3){
x[j][1]=parseInt(MyIf);
}
如果(k%3==0){
j++;
k=1;
}否则{
k++;
}
});
console.log(x);//控制台返回所有[0]“未定义”
});

我遗漏了什么?

这是因为您每次在
中都创建了一个新数组

x[j] = new Array();
所以它总是未定义的

把它放在这里:

if(k % 3 == 0) {
        j++;
        k = 1;
        x[j] = new Array();
      }

不要忘记调用
x[j]=newarray()这是因为每次在
中都会创建一个新数组

x[j] = new Array();
所以它总是未定义的

把它放在这里:

if(k % 3 == 0) {
        j++;
        k = 1;
        x[j] = new Array();
      }

不要忘记调用
x[j]=newarray()在第一次跑步之前。

应该这样做:

var arrayList = [1,2,3,4,5];
var x = new Array(); 
var j = 0;
var k = 1;
x[j] = new Array();
$.each(arrayList, function(i,e) {

  var MyIf = $(e).text(); 


  if(k == 2) {
    x[j][0] = 4; // This always returns undefined, no matter which value I assign.
  }

  if(k == 3) {
    x[j][1] = parseInt(MyIf);
  }

  if(k % 3 == 0) {
    j++;
    x[j] = new Array();
    k = 1;
  } else {
    k++;
  }

});
console.log(x);
在您的代码中,当k变量等于3时,您将覆盖前面的值,执行以下操作:

x[j] = new Array();

  if(k == 2) {
    x[j][0] = 4; // This always returns undefined, no matter which value I assign.
  }

应该这样做:

var arrayList = [1,2,3,4,5];
var x = new Array(); 
var j = 0;
var k = 1;
x[j] = new Array();
$.each(arrayList, function(i,e) {

  var MyIf = $(e).text(); 


  if(k == 2) {
    x[j][0] = 4; // This always returns undefined, no matter which value I assign.
  }

  if(k == 3) {
    x[j][1] = parseInt(MyIf);
  }

  if(k % 3 == 0) {
    j++;
    x[j] = new Array();
    k = 1;
  } else {
    k++;
  }

});
console.log(x);
在您的代码中,当k变量等于3时,您将覆盖前面的值,执行以下操作:

x[j] = new Array();

  if(k == 2) {
    x[j][0] = 4; // This always returns undefined, no matter which value I assign.
  }


arrayList
有多少个元素?如果它只有1,我希望
x
为空,因为只有当
k==2
k==3
时才添加到它。换句话说,
$循环运行了多少次?arrayList有多个值。当前输出如下所示:[[undefined,3],[undefined,5],[undefined,2]]小提琴会有帮助…您确定有时k==2吗?这段代码试图实现什么?arrayList有多少个元素?如果它只有1,我希望
x
为空,因为只有当
k==2
k==3
时才添加到它。换句话说,
$循环运行了多少次?arrayList有多个值。当前输出看起来是这样的:[[undefined,3],[undefined,5],[undefined,2]]小提琴会有帮助…你确定k==2有时吗?这段代码试图实现什么?它如何解释数组仍然有x[j][1]的值?因为你创建了一个新数组,然后设置值
x[j][1]=somevalue
@KrisVandenBergh,因为当
k==3
时,它会在索引
1
处添加到上次创建的数组中。然后,
j
被增加,这样它就不会再碰到同一个数组了。@Homungus如果在
k%3==0
的情况下,
x[j]
将在
k==2
k==3
的情况下第一次运行时被取消定义。也许不太好看,但是你可以在
的第一行执行。每个
循环都有一个
if(typeof x[j]=='undefined')x[j]=[]
修复它(并将其从
k%3==0
案例中完全删除)。@DaniëlKnippers您是对的,当然应该在第一次运行之前初始化它。更新了答案。那么它如何解释数组仍然有x[j][1]的值呢?因为您创建了一个新数组,然后将值
x[j][1]=somevalue
@KrisVandenBergh,因为当
k==3
时,它会在索引
1
处添加到上次创建的数组中。然后,
j
被增加,这样它就不会再碰到同一个数组了。@Homungus如果在
k%3==0
的情况下,
x[j]
将在
k==2
k==3
的情况下第一次运行时被取消定义。也许不太好看,但是你可以在
的第一行执行。每个
循环都有一个
if(typeof x[j]=='undefined')x[j]=[]
修复它(并将其从
k%3==0
案例中完全删除)。@DaniëlKnippers您是对的,当然应该在第一次运行之前初始化它。更新答案。