配列の先頭に要素を追加したり、前置したりする必要があります。
例えば、以下のような配列があるとします。
[23, 45, 12, 67]
そして、AJAXコールからのレスポンスが34
の場合、更新された配列は以下のようになります。
[34, 23, 45, 12, 67]
現在、私はこのようにしようと考えています。
var newArray = [];
newArray.push(response);
for (var i = 0; i < theArray.length; i++) {
newArray.push(theArray[i]);
}
theArray = newArray;
delete newArray;
何か良い方法はありますか?Javascriptにはこのような機能が組み込まれていますか?
私の方法の複雑さは O(n)
であり、より良い実装を見るのは本当に興味深いことです。
unshift][1]を使います。これは [push
]2 に似ていますが、配列の最後ではなく最初に要素を追加することが特徴です。
/
push` - 配列の先頭または末尾に要素を追加します。/
pop` - 配列の最初/最後の要素を削除して返す簡単な図...
unshift -> array <- push
shift <- array -> pop
とチャートを表示します。
add remove start end
push X X
pop X X
unshift X X
shift X X
MDN Array documentation]3をご覧ください。配列から要素をプッシュ/ポップする機能を持つほぼすべての言語は、要素をアンシフト/シフト(push_front
/pop_front
と呼ばれることもあります)する機能も持っていますので、これらを自分で実装する必要はありません。
コメントでも指摘されていますが,元の配列の変更を避けたい場合には,2つ以上の配列を連結する concat
を使うことができます.これを使うと,既存の配列の前後に単一の要素を機能的に押し込むことができます.そのためには,新しい要素を単一要素の配列にする必要があります.
``javascript const array = [ 3, 2, 1 ] とします。
const 新しい最初の要素 = 4
const newArray = [newFirstElement].concat(array) // [ 4, 3, 2, 1 ] となります。
`concat` はアイテムを追加することもできます。concat` に渡す引数は、どのような型でも構いません。引数がまだ配列でない場合には、暗黙のうちに単一要素の配列でラップされます。
``javascript
const array = [ 3, 2, 1 ] です。
const newLastElement = 0
// この2行はどちらも等価です。
const newArray1 = array.concat(newLastElement) // [ 3, 2, 1, 0 ] です。
const newArray2 = array.concat([newLastElement]) // [ 3, 2, 1, 0 ] となります。
Quick Cheatsheet:
シフト/アンシフトやプッシュ/ポップという用語は、少なくともC言語でのプログラミングに慣れていない人にとっては、少々混乱しやすいものです。
この用語に慣れていない方のために、ここでは覚えやすい代替用語の簡単な翻訳を紹介します。
* array_unshift() - (aka Prepend ;; InsertBefore ;; InsertAtBegin )
* array_shift() - (aka UnPrepend ;; RemoveBefore ;; RemoveFromBegin )
* array_push() - (aka Append ;; InsertAfter ;; InsertAtEnd )
* array_pop() - (aka UnAppend ;; RemoveAfter ;; RemoveFromEnd )