【问题标题】:Delete an element inside a JSON array by value with jQuery使用 jQuery 按值删除 JSON 数组中的元素
【发布时间】:2013-02-28 08:24:11
【问题描述】:

我的 json 数组的一部分

var videos = $j.parseJSON('
  [
    { "privacy":"public",
      "id":"1169341693" },

    { "privacy":"private",
      "id":"803641223" },

    { "privacy":"public",
      "id":"1300612600" }, ......

当我 console.log 我得到的元素时

   [Object, Object, Object, …]
       0: Object
           privacy: "public"
           id: "1169341693"
       1: Object
           privacy: "private"
           id: "803641223"
       2: Object
           privacy: "public"
           id: "1300612600"

我还有一个我想搜索的唯一 ID

var uniqueId = 803641223;

我想在我的视频数组中找到正确的 id,然后删除整个数组元素。所以在这种情况下,我希望我的最终视频数组只包含 2 个对象,而不是 3 个:

 var videos = $j.parseJSON('
  [
    { "privacy":"public",
      "id":"1169341693" },

    { "privacy":"public",
      "id":"1300612600" }, ......

我的问题是如何进入数组进行拼接。我更喜欢用 jQuery 来做

有什么帮助吗?

【问题讨论】:

    标签: javascript jquery arrays json


    【解决方案1】:

    你可以使用grep

    videos = $.grep(videos, function(e) { return e.id!='803641223' });
    

    在原生 JavaScript 中,您可以使用类似的 filter 函数,但 IE8 不支持它。

    请注意videos 是一个 JavaScript 数组,它不是 JSON 数组,即使它是通过解析 JSON 字符串生成的。

    【讨论】:

    • @Lelly 请注意,这会创建一个包含可接受元素的新数组(没有特定的 id 属性)。 splice 修改数组。这取决于你想要什么。
    • 哦,在那种特殊情况下,我需要一个拼接来修改原始数组。我可以将您的解决方案与 splice 一起使用吗?
    • @Lelly So dystroy 的解决方案重新分配 videos 的值到“过滤”列表。从技术上讲,它完成了与splice 相同的工作,只是做了一些额外的工作。如果您想将原始数组保留在 videos 中,但将过滤后的数组放在新变量中,您可以使用:var videos = [ blah blah blah ]; var filteredVideos = $.grep(videos, function(e) { return e.id!='803641223' }); - 注意videos 仍将包含原始数组,filteredVideos 将包含过滤后的数组数组(基于uniqueId)。所以你从那里开始使用filteredArray
    • @Lelly 如果要更改原始数组,使用Ian的解决方案,可以。但是请检查您是否喜欢:通常您真正想要的是一个新数组。 – dystroy 2 分钟前编辑
    • @dystroy 如果您同意/想要,您可以包含/解释您的示例用过滤后的数组覆盖videos,技术上与拼接相同。如果您将 $.grep 的结果存储在另一个变量中,您仍然拥有原始的 videos 数组和一个新的过滤数组。所以我评论中的例子是使用var videos = [ blah blah blah ]; var filteredVideos = $.grep(videos, function(e) { return e.id!='803641223' }); - 这应该满足保留原件。
    【解决方案2】:

    就地修改数组的非jQuery解决方案:

    var uniqueId = 803641223;
    var videos = [
        { "privacy":"public",
          "id":"1169341693" },
    
        { "privacy":"private",
          "id":"803641223" },
    
        { "privacy":"public",
          "id":"1300612600" }
    ];
    
    function cleaner(arr, id) {
        for (var i = 0; i < videos.length; i++) {
            var cur = videos[i];
            if (cur.id == uniqueId) {
                arr.splice(i, 1);
                break;
            }
        }
    }
    
    cleaner(videos, uniqueId);
    

    http://jsfiddle.net/4JAww/1/

    请注意,这会修改原始数组,以便原始 videos 数组将包含您想要的项目,而与 uniqueId 匹配的项目将消失(永远)。所以这取决于您是否希望能够再次访问原始数组,或者可以修改它。

    它只是循环遍历数组的元素,将项目的id 属性与uniqueId 值进行比较,如果它们匹配,则将splices 进行比较。我在splice 之后立即使用break;,因为您似乎暗示uniqueId 只能/应该在数组中出现一次,因为它是...唯一的。

    【讨论】:

      【解决方案3】:

      您好,您可以使用 javascript splice 功能删除元素...

      videos.items.splice(1, 3); // Removes three items starting with the 2nd,
      

      【讨论】:

        【解决方案4】:

        它为我工作。

          arrList = $.grep(arrList, function (e) { 
        
                if(e.add_task == addTask && e.worker_id == worker_id) {
                    return false;
                } else {
                    return true;
                }
            });
        

        它返回一个没有该对象的数组。

        希望对你有帮助。

        【讨论】:

          猜你喜欢
          • 2019-05-09
          • 1970-01-01
          • 2021-12-25
          • 1970-01-01
          • 2017-03-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多