【问题标题】:Javascript JSONArray issue with push() and for looppush() 和 for 循环的 Javascript JSONArray 问题
【发布时间】:2012-12-18 04:00:55
【问题描述】:

我制作了一个简单的程序,使用两个 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 但是如果我刚刚插入,为什么第二个出现在数组上:[{'pname' : imagesdata[z].pname , 'pimage' : imagesdata[z].pimage}]

谢谢!

【问题讨论】:

  • 看起来和 JSON 没有任何关系。
  • 为什么需要这些闭包? 'i' 在辅助 for 循环的每次迭代中都将保持不变。

标签: javascript json node.js object for-loop


【解决方案1】:

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

除非我误读了您的代码:

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

但是,请注意,由于 array 变量将在您初始化数组后成为对数组的引用,因此您对其所做的所有更改都会自动反映在 @987654328 中@ 财产;所以你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

【讨论】:

  • 哦...搞错了哈哈 :) 非常感谢!
猜你喜欢
  • 2020-09-15
  • 1970-01-01
  • 2012-09-20
  • 1970-01-01
  • 1970-01-01
  • 2011-10-21
  • 2010-12-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多