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

我做了一个简单的程序存储在本地使用两个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

以上是 的Javascript JSONArray问题与push()和for循环 的全部内容, 来源链接: utcz.com/qa/259854.html

回到顶部