Разбор JSON и удаление объектов из него дают ошибку

60
6

У меня есть приложение 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];
}
});
}
}

Но он не проходит через цикл, и я получаю сообщение об ошибке "Не могу прочитать имя свойства" неопределенного "

спросил(а) 2021-01-12T13:05:07+03:00 1 неделя, 4 дня назад
1
Решение
73

... вы не хотите удалять объект изображения. Вы хотите объединить его из массива.

Удаление его оставляет отверстие в массиве, тогда как сплайсинг удаляет отверстие.

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.

ответил(а) 2021-01-12T13:05:07+03:00 1 неделя, 4 дня назад
43

в вашей строке json отсутствует скобка:

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

редактировать

Я думаю, что у вашего json просто была опечатка, так как это не ошибка, которую вы получили бы.


Вы не должны удалять из $.each вместо этого вы должны использовать $.grep

см. информацию здесь

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

ответил(а) 2021-01-12T13:05:07+03:00 1 неделя, 4 дня назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема