jQuery удалить индекс массива - PullRequest
2 голосов
/ 08 июля 2011

У меня проблемы с удалением / удалением элемента из массива в jQuery. Я запустил результаты в console.log (), и он отображается как объект. Я создал функцию, которая возвращает строку json, а затем анализирую ее, пример ниже:

var ret = jQuery.parseJSON($.return_json(data));

Работает хорошо, однако я запускаю цикл $.each, который удаляет элементы из этого массива / объекта.

var old = $("element").find("li[rel=item]");
$.each(old, function(index, value) {
    ret.splice($(value).attr("id"), 1);
});

Выше я ищу элементы с атрибутом rel = item. Этот же элемент содержит id, который связан с индексом функции, которая возвращает проанализированную переменную json.

Я запустил Инструменты разработчика в Google Chrome, чтобы увидеть сообщение об ошибке:

Uncaught TypeError: Object #<Object> has no method 'splice'

Любые слова руководства будут высоко ценится. Спасибо.

Ответы [ 3 ]

4 голосов
/ 08 июля 2011

Кажется, что ret на самом деле не массив (и, скорее всего, объект (например: {someName: "someVal"}) вместо этого).

Я также предполагаю, что вы имеете в виду для $(value).attr("id") длябыть строковым идентификатором, таким как someName в примере объекта выше.Если это так, и вы работаете с объектом, и у вас есть соответствующий идентификатор свойства, то, к счастью, решить проще, чем splice.

Попробуйте:

$("element").find("li[rel=item]").each(function() {
    delete ret[$(this).attr("id")];
});
3 голосов
/ 08 июля 2011

splice - это только метод массивов, а не объектов. ret в данном случае это объект, а не массив.

Если вы пытаетесь удалить определенные элементы из объекта, вы можете сделать это:

$("element").find("li[rel=item]").each(function(i,v){
   delete ret[v.id];
});

пс. Вы можете использовать .each вместо $.each.

Если вы действительно хотите превратить объект в массив, вы можете просто пройти через него и вставить элементы в массив.

var obj = {"1":"item 1", "2": "item 2", "3": "Item 3"};
var arr = [];
for(i in obj){
  if(obj.hasOwnProperty(i)){
    arr.push(obj[i]);
  }
}
0 голосов
/ 08 июля 2011

ret - это объект JSON, содержащий массив, и вы не можете соединить его. Вам нужно ссылаться на то, что вы называете массивом внутри объекта, и склеивать это.

(Поможет, если вы разместите код, в котором вы определяете массив).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...