的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()
返回数组的长度,不与上涨了新的元件阵列。
除非我错读你的代码:
- 在第一次迭代,你打的
== null
检查,因此,创建一个新的数组。 - 在第二次迭代中,您处于
else
子句中,并向该数组添加一个元素但然后将data
属性设置为它的长度(2)。 - 在第三个迭代中,
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 == null
是true
(通过强制类型转换)。一个更好的检查将是=== undefined
,或者更好,array instanceof Array
以上是 的Javascript JSONArray问题与push()和for循环 的全部内容, 来源链接: utcz.com/qa/259854.html