deleteオペレータは、オブジェクトからプロパティを除去するために使用されます。
const obj = { foo: "bar" }
delete obj.foo
obj.hasOwnProperty("foo") // false
配列の場合、これは要素を削除することと同じではないことに注意してください。配列から要素を削除するには、Array#spliceまたはを使用しますArray#pop。例えば:
arr // [0, 1, 2, 3, 4]
arr.splice(3,1); // 3
arr // [0, 1, 2, 4]
詳細
deleteJavaScriptには、CおよびC ++のキーワードとは異なる機能があります。メモリを直接解放するわけではありません。代わりに、その唯一の目的は、オブジェクトからプロパティを削除することです。
配列の場合、インデックスに対応するプロパティを削除すると、疎な配列(つまり、「穴」のある配列)が作成されます。ほとんどのブラウザーは、これらの欠落した配列インデックスを「空」として表します。
var array = [0, 1, 2, 3]
delete array[2] // [0, 1, empty, 3]
がにdelete再配置array[3]されないことに注意してくださいarray[2]。
JavaScriptのさまざまな組み込み関数は、スパース配列をさまざまに処理します。
for...in 空のインデックスを完全にスキップします。
従来のforループはundefined、インデックスの値に戻ります。
を使用Symbol.iteratorするすべてのメソッドundefinedは、インデックスの値を返します。
forEach、mapとreduce単純に不足しているインデックスをスキップします。
そのdeleteため、配列から要素を削除する一般的なユースケースでは、演算子を使用しないでください。配列には、要素を削除してメモリを再割り当てするための専用メソッドがArray#splice()ありArray#popます。
Array#splice(start [、deleteCount [、item1 [、item2 [、...]]]])
Array#splice配列を変更し、削除されたインデックスを返します。deleteCount要素がインデックスから除去されstart、そしてitem1, item2... itemNインデックスから配列に挿入されますstart。deleteCount省略した場合、startIndexの要素が配列の最後まで削除されます。
let a = [0,1,2,3,4]
a.splice(2,2) // returns the removed elements [2,3]
// ...and `a` is now [0,1,4]
同様に名前が付けられていますが、機能が異なりますArray.prototype:Array#slice。
Array#slice([begin [、end]])
Array#slice非破壊的であり、指定されたインデックスfromからstartto を含む新しい配列を返しますend。end指定しない場合、デフォルトで配列の最後になります。endが正の場合、停止するゼロベースの非包括的インデックスを指定します。end負の場合は、配列の最後から逆算して、停止するインデックスを指定します(たとえば、-1を指定すると、最終インデックスが省略されます)。の場合end <= start、結果は空の配列です。
let a = [0,1,2,3,4]
let slices = [
a.slice(0,2),
a.slice(2,2),
a.slice(2,3),
a.slice(2,5) ]
// a [0,1,2,3,4]
// slices[0] [0 1]- - -
// slices[1] - - - - -
// slices[2] - -[3]- -
// slices[3] - -[2 4 5]
Array#pop
Array#pop配列から最後の要素を削除し、その要素を返します。この操作により、配列の長さが変更されます。