使用 jQuery 按值删除 JSON 数组中的元素

Posted

技术标签:

【中文标题】使用 jQuery 按值删除 JSON 数组中的元素【英文标题】:Delete an element inside a JSON array by value with jQuery 【发布时间】: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 来做

有什么帮助吗?

【问题讨论】:

【参考方案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;
        
    );

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

希望对你有帮助。

【讨论】:

以上是关于使用 jQuery 按值删除 JSON 数组中的元素的主要内容,如果未能解决你的问题,请参考以下文章

按值分组 json 数组

php - 从json对象中按值删除[关闭]

按值删除数组项[重复]

按值删除数组项[重复]

按值删除数组项[重复]

按值删除数组项[重复]