【问题标题】:Parsing JSON and deleting objects from it is giving error解析 JSON 并从中删除对象会出错
【发布时间】:2012-09-12 00:38:59
【问题描述】:

我有一个 phonegap 应用程序,我想在下载之前修剪图片。 我将一个 JSON 对象传递给我的函数,它是

[{"name":"aaa.jpg","link":"https:\/\/www.abc.com\/aaa.jpg"},"name":"bbb.jpg","link":"https:\/\/www.abc.com\/\/bbb.jpg"}]

并使用下面的函数来解析和删除

function prunePictures(pictures) {
    for ( var i = 0; i < entries.length; ++i) {
            var name = entries[i].name;
            $.each(pictures, function(i, obj) {
                if (obj.name == name) {
                    delete pictures[i];
                }
            });
     }
}

但它没有通过循环,我收到错误“无法读取未定义的属性'名称'”

【问题讨论】:

  • 然后entries[i]obj 的计算结果为未定义。哪一个,为什么?
  • 在您的调试环境中,在 for 循环的开头添加一个 console.log(entries[i])。在每个函数的开头添加一个 console.log(obj) 或 console.log(i)。这应该告诉你你需要知道什么。
  • 是的,JSON 缺少 {

标签: java javascript jquery json cordova


【解决方案1】:

...您不想删除图片对象。 你想把它从数组中拼接出来。

删除它会在数组中留下一个洞,而拼接它会删除这个洞。

var l = entries.length, i = 0, pictureName;

for (; i < l; i += 1) {
    pictureName = entries[i].name;
    pictures.forEach(function (picture, i, arr) {
        if (pictureName === picture.name) { arr.splice(i, 1); }
    });
}

如果实体中的对象具有相同的name 属性,则删除图片中的对象。

【讨论】:

  • 非常感谢。这段代码对我有用。我向其他人道歉,因为缺少“{”这是一个错字。感谢大家发布回复。它帮助我调试了我的代码。 @agreco: $grep 在我的情况下不起作用,但现在我知道它的用途了。谢谢
【解决方案2】:

您的 json 字符串缺少大括号:

[{"name":"aaa.jpg","link":"https:\/\/www.abc.com\/aaa.jpg"},{"name":"bbb.jpg","link":"https:\/\/www.abc.com\/\/bbb.jpg"}]

编辑

我认为你的 json 只是有一个错字,因为这不是你会得到的错误。

您不应该删除 $.each 而应该使用 $.grep

查看信息here

pictures = $.grep(pictures, function(obj,i) {
    if (obj.name == name) {
        return false;
    }
    return true;
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 2018-01-17
    • 2011-11-30
    相关资源
    最近更新 更多