JavaScriptで配列の要素を設定解除するにはどうすればよいですか?


回答:


243

配列から要素を削除しないため、deleteを使用しないでください。未定義として設定されるだけで、配列の長さに正しく反映されません。

キーがわかっている場合は、splice ie を使用する必要があります

myArray.splice(key, 1);

スティーブンの立場にいる人にとっては、次のようなことを試すことができます:

for (var key in myArray) {
    if (key == 'bar') {
        myArray.splice(key, 1);
    }
}

または

for (var key in myArray) {
    if (myArray[key] == 'bar') {
        myArray.splice(key, 1);
    }
}

3
+1良い点、私もこの方法が好きです:ejohn.org/blog/javascript-array-remove
CMS

3
@ThiefMaster-説明してもいいですか?それが何を意味するのかわからず、学びたいと思っています。いつものように、編集は手元のコメントより1,000,000倍優れています。あなたはあなたが持っている担当者の量でそれを知っているべきです。
行く

21
for (var key in myArray)代わりに使用for (key in myArray)-それ以外の場合keyはグローバル変数であり、同じ問題のあるループ内で関数を呼び出すと、予期しない結果が発生します。
ThiefMaster 2011

2
2番目の例は、配列が「bar」に一致する行に複数の項目がある場合は機能しません。配列のインデックスがシフトし、アイテムのスプライシングの半分が失われます。代わりに、一致が見つかったときにインデックスをデクリメントするforループを使用します。
Dave Lancea、2014年

:オブジェクトの配列のためにstackoverflow.com/questions/15287865/...
Fedir RYKHTIK

52
delete foo[key];

:D


4
技術的にはそれは質問に答えません。彼はキー「バー」を削除しようとしています。そして、あなたのキー変数はそれを意味しません。:P

4
key = 'bar'; eval( "delete foo。" + key); 非表示 ; D
olliej 2008年

3
使用しないでくださいeval。オブジェクト/配列のキー/インデックスの削除は、を使用しない非常に簡単な方法で実現できますeval
Dinei

4
実際、delete foo [key]によってインデックス付き配列から削除すると、値はfoo [key] = undefinedに格納され、foo.lengthは同じままになり、これは誤りです。代わりに使用SPLICEので
ПавелИванов

delete foo [key]を使用してください。foo.splice(key、1);を使用する必要があります。
vnguyen

38

重要な注意:JavaScript配列は、PHPから使用するような連想配列ではありません。「配列キー」が文字列の場合、配列の内容を操作することはありません。配列はオブジェクトであり、ブラケット表記を使用して<key name>という名前のメンバーにアクセスしています。したがって:

var myArray = [];
myArray ["bar"] = true;
myArray ["foo"] = true;
alert(myArray.length); // 0を返します。

配列に要素を追加していないため、myArrayのbarおよびfooメンバーのみが変更されています。


37

キー名がわかっている場合は、次のようにします。

delete array['key_name']

2
これは配列ではありません!それはオブジェクトです(はい、これらはJSでは連想配列と呼ばれますが、実際にはそうではありません。JS配列を操作する場合、このメソッドは有害です)。
Wintercounter 14

3

これが私のやり方です

 myArray.splice( myArray.indexOf('bar') , 1) 

1
Array.prototype.indexOf()メソッドは、キーではなく配列内の値を検索します。したがって、これは機能しません。
Nadav 2018年

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.