gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 13:10:14 24 4
gpt4 key购买 nike

我已经编写了一个简单的程序来使用两个 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 没有 push 方法 但是,如果我刚刚插入,为什么数字 2 会出现在数组中:[{'pname' : imagesdata[z].pname , 'pimage' : imagesdata[z].pimage}]

谢谢!

最佳答案

push() 返回数组的长度,而不是添加了新元素的数组。

除非我误读了你的代码:

  1. 在第一次迭代中,您进行了 == null 检查,因此创建了一个新数组。
  2. 在第二次迭代中,您在 else 子句中向数组添加一个元素,但是然后设置 data 属性到它的长度(2)。
  3. 第三次 迭代中,Number 没有push() 方法。

但是,请注意,因为一旦您初始化了数组,array 变量将成为对该数组的引用,您对其所做的所有更改将自动反射(reflect)出来返回 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

关于push() 和 for 循环的 Javascript JSONArray 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14144872/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com