使用 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
值进行比较,如果它们匹配,则将splice
s 进行比较。我在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 数组中的元素的主要内容,如果未能解决你的问题,请参考以下文章