6

私の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を見つけて、その配列要素全体を削除したいと思います。したがって、その場合、最終的なビデオ配列に3つではなく2つのオブジェクトのみを含める必要があります。

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

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

私の問題は、スプライスを行うために配列に入る方法です。私はjQueryでそれを行うことを好みます

何か助けてください?

4

4 に答える 4

14

grepを使用できます:

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

バニラJavaScriptでは、同様のフィルター関数を使用できますが、IE8ではサポートされていません。

videosこれはJavaScript配列であり、JSON文字列を解析して作成された場合でもJSON配列ではないことに注意してください。

于 2013-03-12T17:14:37.827 に答える
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;の直後に使用します。これは、 can / shouldが配列に1回だけ表示さspliceれることを意味しているように思われるためです。これは、一意であるためです。uniqueId

于 2013-03-12T17:21:49.890 に答える
3

こんにちは、JavaScriptスプライス関数で要素を削除できます...

videos.items.splice(1, 3); // Removes three items starting with the 2nd,
于 2014-06-11T13:20:19.723 に答える