1

我有一个 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];
                }
            });
     }
}

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

4

2 回答 2

2

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

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

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如果实体中的对象具有相同的属性,则删除图片中的对象。

于 2012-09-12T00:49:23.533 回答
0

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

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

编辑

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

您不应该从 a 中删除,$.each而是应该使用$.grep

在这里查看信息

pictures = $.grep(pictures, function(obj,i) {
    if (obj.name == name) {
        return false;
    }
    return true;
});
于 2012-09-12T00:40:57.653 回答