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]
詳細
delete
JavaScriptには、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からstart
to を含む新しい配列を返します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
配列から最後の要素を削除し、その要素を返します。この操作により、配列の長さが変更されます。