jquery每个函数和数组在for循环中显示undefined

时间:2013-09-11 02:53:39

标签: javascript jquery arrays loops push

这是我的问题的HTML部分

<DIV ID="CONTAINER">
    <DIV CLASS="ITEMS">
        Purchase
    </DIV>
    <DIV CLASS="ITEMS">
        Return
    </DIV>
    <DIV CLASS="ITEMS">
        On Hold
    </DIV>
    <DIV CLASS="ITEMS">
        Exchange
    </DIV>
</DIV>    

Jquery的

var MyArray = [];  
var $Items = $('.ITEMS');
$Items.each( 
  function(){
    Value = $.trim($(this).html());
    MyArray.push(Value);
  }
);
var Count_Parts = MyArray.length;            
for (i = 1; i <= Count_Parts; i++ ){
  console.log(MyArray[i]);
}

我的问题是控制台没有显示正确的结果我看到Return,On Hold,Exchange,undefined ..... 它正在跳过购买并显示undefined而不是? 为什么购买未定义?

2 个答案:

答案 0 :(得分:1)

您的代码大部分都是正确的,它将所有项目的正确值推送到数组中。 您正在使用的for循环不是按预期迭代。如果你看这一行:

for (i = 1; i <= Count_Parts; i++ ){

您正在以数字1开始循环并要求它在小于或等于Count_Parts(即为4)时停止。 现在,当您访问数组中的元素时,您将访问元素1,2,3,4。然而,该数组从0开始,并且元素存储在0,1,2,3。

正确的实施方式是:

for (i = 0; i < Count_Parts; i++ ){

这将使您的循环开始为0并且仅在i小于计数时运行。所以它将访问0,1,2,3,这是数组存储所有元素的地方。

带有更正的代码的完整部分是:

var MyArray = [];  
var $Items = $('.ITEMS');
$Items.each( 
  function(){
    Value = $.trim($(this).html());
    MyArray.push(Value);
  }
);
var Count_Parts = MyArray.length;            
for (i = 0; i < Count_Parts; i++ ){
  console.log(MyArray[i]);
}

JsFiddle:http://jsfiddle.net/MQBnW/

答案 1 :(得分:0)

数组索引从0开始...(长度-1)

var Count_Parts = MyArray.length;            
for (i = 0; i < Count_Parts; i++ ){
  console.log(MyArray[i]);
}

演示:Fiddle