6

重複の可能性:
JavaScriptの配列から削除

次の JSON オブジェクトがあります。

[id:84,id:92,id:123,id:2353]

javascriptを使用して値が「123」のアイテムを削除するにはどうすればよいですか?

または、jsonを次のようにフォーマットした場合

[84, 92, 123, 2353]

この場合、どのように削除されますか?

4

10 に答える 10

20

あなたがこれを持っていると仮定します:

var items  = [{ id: 84 }, { id: 92 }, { id: 123 }, { id: 2353 }];

var filtered = items.filter(function(item) { 
   return item.id !== 123;  
});

//filtered => [{ id: 84 }, { id: 92 }, { id: 2353 }]
于 2013-01-18T14:22:19.013 に答える
9

json実際に変数にjsonのオブジェクトがあるとします

for (key in json) {
    if (json.hasOwnProperty(key) && json[key] == 123) {
        delete json[key];
    }
}
于 2013-01-18T14:12:40.303 に答える
3

より短い代替手段は次のとおりです。

var newArr = [{id:84}, {id:92}, {id:123}, {id:2353}].filter(function(a) {
   return a.id != 123;
});

あなたがこれを持っている場合:

var arr = [{id:84}, {id:92}, {id:123}, {id:2353}]

値が 123 のアイテムを削除するには、次のようにします。

for(var i = 0; i < arr.length; i++) {
    if(arr[i].id == 123) {
        arr.splice(i, 1);
        break;
    }
}
于 2013-01-18T14:14:44.813 に答える
1

ループを避けたいようです。利用可能であると仮定すると、次を使用できます.filter

[{id:84},{id:92},{id:123},{id:2353}]
   .filter(function (elem) { return elem.id !== 123; });

これは技術的にはループを実行しますが、少なくともそれを見る必要はありません。

于 2013-01-18T14:19:01.377 に答える
1

「json」が実際には [84, 92, 123, 2353] のような配列であると仮定します。

var myString = "[84, 92, 123, 2353]";
var myArray = JSON.parse(myString);
var index = myArray.indexOf(123); // whatever value you are looking for
myArray.splice(index, 1);

http://jsfiddle.net/7vkK6/

于 2013-01-18T14:19:20.960 に答える
1

次のように splice 関数を使用できます。

var data = [{id:84}, {id:92}, {id:123}, {id:2353}];
            function remove(){
                for(var i = 0, max = data.length; i < max; i++) {
                    var a = data[i];

                    if(a.id === 123) {
                        data.splice(i, 1);
                        break;
                    }
                }
            }
            remove();
于 2013-01-18T14:17:29.230 に答える
1
function removeClass(obj, cls) {
  var classes = obj.className.split(' ');

  for(i=0; i<classes.length; i++) {
    if (classes[i] == cls) {
      classes.splice(i, 1);
      i--; // (*)
    }
  }
  obj.className = classes.join(' ');

}

var obj = { className: 'open menu menu' }

removeClass(obj, 'menu')
alert(obj.className)
于 2013-01-18T14:13:11.910 に答える
0

あなたが現在持っているのはJSONではないので、いくつかの異なるオプションを提供します。

アレイ がある場合はarr = [84,92,123,2353]

arr = arr.filter(function (x) {return x !== 123;}); // all occurrences
// OR
arr.splice(arr.indexOf(123), 1); // first occurrence only

オブジェクト がある場合obj = {"84": a, "92": b, "123": c, "2353": d}、いくつかの式に対して、ad

delete obj['123']; // obj now {"84": a, "92": b, "2353": d}
于 2013-01-18T14:21:46.630 に答える
0

あなたの質問とコメントを正しく理解していると仮定すると、次のようなことができます。

var old_array = [{id: 84},...];
var new_array = [];

for(var i = 0, len = old_array.length; i++) {
   if (old_array[i].id != 123) new_array.push(old_array[i]);
}
于 2013-01-18T14:12:12.550 に答える
-2

1)JSONは文字列であり、配列やオブジェクトではありません。

var json = "[1,2,3]";

2)有効なJSONは有効なJSである必要があります

var myJSObj = { 1,2,3 }, // broken
    myJSArr = [ name : 1, name2 : 2 ]; // broken

3)JS配列がある場合は、を使用して要素を削除できます[].splice

var arr = [ 1, 2, 3, 4 ],
    i = 0, l = arr.length,
    test = 4;

for (; i < l; i += 1) {
    if (arr[i] === test) { arr.splice(i, 1); } // remove 1 starting at i
}

4)名前付きキーを持つオブジェクトがある場合は、次を使用できますdelete

var obj = { val : 1 };
delete obj.val;
于 2013-01-18T14:20:31.647 に答える