• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

的Javascript JSONArray问题与push()和for循环

JavaScript 来源:Marc Ortiz 5次浏览

我做了一个简单的程序存储在本地使用两个for循环数组,但奇怪的事情发生了……的Javascript JSONArray问题与push()和for循环

有我的代码:

var imagesdata = data[0]; 
var preferences = data[1]; 

for (var i = preferences.length - 1; i >= 0; i--) { 
    (function(i){ 
     for (var z = imagesdata.length - 1; z >= 0; z--) { 
      (function(i){ 
       if(imagesdata[z].cathegory == preferences[i].cathegory){ 
        var array = $('body').data('data'+preferences[i].cathegory); 
        if(array == null){ 
         alert('asefsef'); 
         $('body').data('data'+preferences[i].cathegory, [{'pname' : imagesdata[z].pname , 'pimage' : imagesdata[z].pimage}]); 
        }else{ 
         $('body').data('data'+preferences[i].cathegory, array.push({'pname' : imagesdata[z].pname , 'pimage' : imagesdata[z].pimage})); 
        } 
       } 
      })(i); 
     }; 
    })(i); 
}; 

它说,对象2有没有一种方法推但是,为什么阵列上排名第二的出现,如果我刚插入:[{'pname' : imagesdata[z].pname , 'pimage' : imagesdata[z].pimage}]

谢谢!


===========解决方案如下:

push()返回数组的长度,不与上涨了新的元件阵列。

除非我错读你的代码:

  1. 在第一次迭代,你打的== null检查,因此,创建一个新的数组。
  2. 在第二次迭代中,您处于else子句中,并向该数组添加一个元素然后将data属性设置为它的长度(2)。
  3. 第三个迭代中,Number没有push()方法。

但是,请注意,由于array变量将是对数组的引用,一旦你初始化数组,你让所有的变化它会自动的反射回来的data财产;所以你不需要写回的变化,当你push()新的数据:

if (array == null) { 
    alert('asefsef'); 
    $('body').data('data' + preferences[i].cathegory, [{ 
     'pname': imagesdata[z].pname, 
     'pimage': imagesdata[z].pimage}]); 
} else { 
    array.push({ 
     'pname': imagesdata[z].pname, 
     'pimage': imagesdata[z].pimage 
    }); 
}​ 

仅供参考,你可能只是击中== null检查靠运气。 data()返回undefined如果该键不存在,它只是恰巧undefined == nulltrue(通过强制类型转换)。一个更好的检查将是=== undefined,或者更好,array instanceof Array


版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)