使用push()和for循环的Javascript JSONArray问题
我已经做了一个简单的程序,使用两个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
检查,并创build一个新的数组。 - 在第二次迭代中,你在
else
子句中,向数组中添加一个元素,然后将data
属性设置为length(2)。 - 在第三次迭代中,
Number
没有push()
方法。
但是,请注意,因为在初始化数组后, array
variables将是对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
(通过types强制转换)。 更好的检查将是=== undefined
,或更好, array instanceof Array