2012-02-08 6 views
2

У меня есть объект JSON, который выглядит примерно как объект ниже, этот объект может продолжаться в течение нескольких дней. Поэтому мне интересно, есть ли в любом случае я могу удалить полный набор, являющийся эквивалентом местоположений [0] или местоположений [1] в приведенном ниже примере. Я должен сначала перебрать объект и попытаться выяснить, какой из них есть. Поэтому давайте скажем, что я хочу удалить набор, где zipcode - 06238, мне нужно будет запустить весь объект местоположения и узнать, какой набор он находится в объекте, а затем удалить его соответствующим образом. Вопрос: я не уверен, как подойти к этому понятию.jquery javascript удалить данные объекта из объекта JSON

{ 
"locations": [ 
      { 
       "city": "San Jose", 
       "state": "CA", 
       "zipcode": "95125", 
       "longitude": "0", 
       "latitude": "0" 
      }, 
      { 
       "city": "Coventry", 
       "state": "CT", 
       "zipcode": "06238", 
       "longitude": "0", 
       "latitude": "0" 
      } 
     ] 
    } 

ответ

15

Просто просто пройти индекс

delete locations[0]; 

Вы пройти через обычный JSON итерации, как этот

jQuery.each(locations, function(i, val) { 
    if(val.zipcode == "yourvalue") // delete index 
    { 
     delete locations[i]; 
    } 
}); 

что-то подобное. вы ищете идею или полную функцию.

Вот jsFiddle

+0

вот пример jsfiddle http://jsfiddle.net/ChpFu/ –

+3

Я бы с осторожностью относился к удалению элементов из массива во время итерации через него, особенно если вы используете метод jQuery.each() ', который кэширует '.length' до того, как он запустится ... – nnnnnn

+0

Полное решение всегда красивое, никогда не будет отрицать один из таких: -D , но что-то, что нужно держать под ногами. Это, я думаю, работает для меня хорошо. Я буду тестировать это достаточно быстро, спасибо – chris

4

Вы можете написать removeFirst функцию:

function removeFirst(arr, func) 
    { 
     for (var i=0; i<arr.length; i++) 
     { 
      if (func.call(arr[i])) 
      { 
       arr.splice(i,1); 
       return arr; 
      } 
     } 
    } 

, а затем вызвать его:

removeFirst(locations, function(){return this.zipcode=="06238";}); 

Если вы хотите, чтобы удалить более одного элемента, вы можете написать следующее:

function removeMany(arr, func) 
    { 
     for (var i=arr.length; i>0; --i) 
     { 
      if (func.call(arr[i])) 
      { 
       arr.splice(i,1); 
      } 
     } 
     return arr; 
    } 

и используйте его таким же образом.

В качестве альтернативы, используйте подчеркивание (http://documentcloud.github.com/underscore) отвергают метод подобным образом:

_.reject(locations, function(location){ return location.zipcode=="06238";}); 

Подчеркивание довольно хорошо для выполнения манипуляций массива.

+1

Для цикла в Removemany() должен быть для (var i = arr.length; i> 0; -i). – San

0

Это рабочий для меня.

arrList = $.grep(arrList, function (e) { 

     if(e.add_task == addTask && e.worker_id == worker_id) { 
      return false; 
     } else { 
      return true; 
     } 
    }); 

Он возвращает массив без этого объекта.

Надеюсь, это поможет.

Смежные вопросы