【问题标题】:remove json attribute where attribute is a variable删除 json 属性,其中属性是一个变量
【发布时间】:2010-03-16 17:24:00
【问题描述】:

我有一个新闻提要,其中提要中的项目是根据从服务器返回的 JSON 创建的。当用户对某个项目执行操作时,我想通过 javascript 将其从对象中删除。

Feed 如下所示:

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

我正在尝试删除一个 JSON 属性或条目,其中 feedId 是通过使用 jQuery 的变量传入的。我不确定我到底哪里出了问题,但是当我在删除对象之前和之后提醒提要时,我得到了相同的响应:

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());
}

【问题讨论】:

    标签: javascript jquery json object


    【解决方案1】:

    如果我理解正确,您想删除例如如果调用了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

    【讨论】:

    • 是的,我在想类似的事情,但显然 javascript 中已经有一个删除函数,所以我宁愿使用它然后迭代变量。虽然也许我误解了“删除”的用途。
    • delete 可用于从数组中删除元素,但delete newsFeed.feedId[feedId]delete newsFeed[i] 不同。第一个应该删除 feedId 值,而不是整个条目。第二个删除整个对象(id,title,desc)。但是删除和数组存在一个问题。它不会改变它只设置的数组的长度,例如newsFeed[0] 未定义。因此,我的新解决方案迭代了 newsFeed 项目并使用 resigs 数组 remove
    • 感谢您解释这种抖动。那时候我想过那个。我会使用你提供的代码。
    • 不幸的是,看起来可能与 'array.prototype.remove' 和 jQuery '.remove()' 存在冲突,因为当我添加 array.prototype 时脚本出错了。消除。我尝试将函数重命名为 array.prototype.remove2,但由于某种原因仍然出错。
    • 我无法检测到冲突,但由于我没有真正测试使用data() 检索对象,因此我在其中遇到了其他错误。再次修复代码。这次我还用 jQuery 1.4.2 你的 json 对象和remove() 方法制作了一个演示页面。检查它是否适合您
    【解决方案2】:

    我不确定为什么 '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]);
        }
    }
    

    似乎有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-24
      • 1970-01-01
      • 1970-01-01
      • 2010-11-16
      • 1970-01-01
      • 2021-01-16
      • 1970-01-01
      相关资源
      最近更新 更多