2010-03-16 124 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]); 
    } 
} 

似乎工作。