2010-03-16 54 views
0

我有一個新聞訂閱源中的項目是從服務器返回的JSON創建的。當用戶對某個項目採取行動時,我想通過javascript將其從對象中移除。刪除json屬性,其中屬性是一個變量

飼料看起來是這樣的:

{"newsFeed":[{"feedId":"1", 
       "title":"item1 title", 
       "desc":"description of the item"}, 
      {"feedId":"2", 
       "title":"item2 title", 
       "desc":"description of the item"}]} 

我想刪除其中feedId通過使用jQuery一個變量傳遞的JSON屬性或條目。我不知道究竟我要去哪裏錯了這裏,但我之前和去除的對象後提醒飼料,我得到了同樣的答覆:

function removeFromFeed(feedId){ 
    var newsFeed=jQuery('div#newsFeed').data('newsFeed'); 
    alert(newsFeed.toSource()); 
    delete newsFeed.feedId[feedId] 
    jQuery('div#newsFeed').data('newsFeed',newsFeed); 
    alert(newsFeed.toSource()); 
} 

回答

1

如果我正確你undertand你想要刪除例如如果removeFromFeed(1)被調用,這整個條目{"feedId":"1", "title":"item1 title", "desc":"description of the item"}

所以我們需要做的是從數組中刪除一個條目。

現在應該工作的新版本。 (順便說一句,這是什麼toSource()我的瀏覽器不知道這個方法)

//http://ejohn.org/blog/javascript-array-remove/ 
Array.prototype.remove = function(from, to) { 
    var rest = this.slice((to || from) + 1 || this.length); 
    this.length = from < 0 ? this.length + from : from; 
    return this.push.apply(this, rest); 
}; 

function removeFromFeed(feedId){ 
    var data = jQuery('div#newsFeed').data('newsFeed'); 
    var len = data.newsFeed.length; 
    for (var i = 0; i < len; i++) { 
     if (data.newsFeed[i].feedId == feedId) { 
      data.newsFeed.remove(i); 
      break; 
     } 
    } 
    jQuery('div#newsFeed').data('newsFeed', data); 
} 

演示:http://jsbin.com/ekali3(代碼視圖:http://jsbin.com/ekali3/edit

+0

是啊,我在想這樣的事情,但顯然JavaScript中已經有了一個可用的刪除函數,所以我寧願使用它,然後迭代變量。 雖然也許我誤解了'刪除'的用途。 – pedalpete 2010-03-16 17:36:57

+0

刪除可用於從數組中刪除元素,但刪除newsFeed.feedId [feedId]與刪除newsFeed [i]'不同。第一個應該刪除feedId值而不是整個條目。第二個刪除整個對象(id,title,desc)。但是,刪除和數組有一個問題。它不會改變它只設置的數組的長度,例如'newsFeed [0]'未定義。因此,我的新解決方案遍歷newsFeed項目並使用resigs array刪除 – jitter 2010-03-16 17:54:58

+0

感謝您解釋抖動。那時候我想過那個。我將使用您提供的代碼。 – pedalpete 2010-03-16 19:20:39

0

我不知道爲什麼「Array.prototype.remove」東西打破了我的頁面,但是我創建了一個新的數組,並且只留下了我想要刪除的對象。

var newsFeed=jQuery('div#newsFeed').data('newsFeed'); 
var newFeed={"feed":[]}; 
alert(newsFeed.toSource()); 
for (var i = 0; i < newsFeed.length; i++) { 
    if(newsFeed.feed[f].shiftId!=shiftId){ 
     newFeed.feed.push(newsFeed.feed[f]); 
    } 
} 

似乎工作。