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

时间:2013-03-12 17:13:11

标签: javascript jquery arrays json

我的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

来做

请帮忙吗?

4 个答案:

答案 0 :(得分:14)

您可以使用grep

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

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

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

答案 1 :(得分:4)

一种非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进行比较。我在break;之后立即使用splice,因为您似乎暗示uniqueId可以/应该只在数组中出现一次,因为它是......唯一的。

答案 2 :(得分:3)

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

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

答案 3 :(得分:0)

对我来说是工人。

  arrList = $.grep(arrList, function (e) { 

        if(e.add_task == addTask && e.worker_id == worker_id) {
            return false;
        } else {
            return true;
        }
    });

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

希望它有所帮助。