連想配列の最後の要素を削除する方法の備忘録です。
普通の配列の場合はpopメソッドを使って削除すればいいだけだと思いますが、連想配列の場合はそうはいきません。
for..in文を使ってループして最後の要素のキーを抜き出してもいいのですが、コードが無駄に長くなると思ったので、今回はObject.keys()を利用することにしました。
追記
Object.keys()メソッドやfor...in文はキーの値が整数値として解釈できる場合、そのキーを優先的に配列に格納するようです。なので、キーが'1'や'2'という値の場合は最後に追加された要素などでも他の要素より先に格納されてしまうケースが出てきてしまうみたいです。
従って、下記の方法はキーが整数値として解釈されない文字列だけで構成されている場合のみ有効ということになります。キーに整数値が含まれてしまう可能性がある場合は、別途配列でキー値を管理したりする必要があるかと思います。
lengthで要素数を取得して削除する方法
Object.keys()は引数で渡されるオブジェクトのキー名を配列で返してくれます。
なので、返された配列の要素数をlengthで取得し、最後の要素の値を使うことで連想配列の末尾のキーを指定して削除することができます。
let as_array = {'key1':'hoge1','key2':'hoge2','key3':'hoge3'}
let keys_array = Object.keys(as_array);
let len = keys_array.length;
delete as_array[keys_array[len - 1]];
popメソッドを利用して削除する方法
こちらは、popメソッドの戻り値を利用した方法です(最初の2行は上記と同じです)。
popメソッドは配列の最後の要素を削除し、その削除した値を戻り値として返します。
それを利用して、popメソッドから返された値をキーにして連想配列の末尾を削除することができます。
let as_array = {'key1':'hoge1','key2':'hoge2','key3':'hoge3'}
let keys_array = Object.keys(as_array);
let last_ele = keys_array.pop();
delete as_array[last_ele];
ちなみに
上記の二つの処理をループさせてベンチマークテストをしてみたところ、1回〜100回ではあまり速度に差はなかったですが、10000回ループさせた場合はpopメソッドを使った方法の方が速かったです(平均0.05秒くらい)。