配列の先頭に要素を追加または追加する必要があります。
たとえば、配列が次のようになっているとします。
[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
を使用してください。 Push
に似ていますが、配列の末尾ではなく先頭に要素を追加する点が異なります。
unshift
/Push
- 配列の最初/最後に要素を追加するshift
/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のドキュメント を調べてください。配列から要素をプッシュ/ポップする機能を持つほとんどすべての言語は、要素をシフト/シフトすることもできます(Push_front
/pop_front
と呼ばれることもあります)。これらを自分で実装する必要はありません。
var a = [23, 45, 12, 67];
a.unshift(34);
console.log(a); // [34, 23, 45, 12, 67]
...
を使用します。デモ
var arr = [23, 45, 12, 67];
arr = [34, ...arr]; // RESULT : [34,23, 45, 12, 67]
console.log(arr)
concat
を介してそれを行うための別の方法
var arr = [1, 2, 3, 4, 5, 6, 7];
console.log([0].concat(arr));
concat
とunshift
の違いは、concat
が新しい配列を返すことです。それらの間のパフォーマンスは ここ で見つかるでしょう。
function fn_unshift() {
arr.unshift(0);
return arr;
}
function fn_concat_init() {
return [0].concat(arr)
}
これがテスト結果です
クイックチートシート:
Shift/unshiftやPush/popという用語は、少なくとも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 )
あなたは配列を持っている:var arr = [23, 45, 12, 67];
先頭に項目を追加するには、splice
を使用します。
var arr = [23, 45, 12, 67];
arr.splice(0, 0, 34)
console.log(arr);
Push()
は、配列の末尾に新しい要素を追加します。pop()
は、配列の末尾から要素を削除します。
unshift()
は、配列の先頭に新しい要素を追加します。shift()
は、配列の先頭から要素を削除します。
theArray.unshift(response)
を使う
var testdata = new Array();
testdata = [23, 45, 12, 67];
testdata = [34, ...testdata];
console.log(testdata)
var array = [23, 45, 12, 67];
array.unshift(11);
alert(array);
実際には、すべてのunshift
/Push
およびshift
/pop
mutate Origin配列。
unshift
/Push
はbegin/endから既存の配列に項目を追加し、shift
/pop
は配列の先頭/末尾から項目を削除します。
しかし、突然変異なしでアイテムを配列に追加する方法があります。結果は新しい配列になります。配列の末尾に追加するには、以下のコードを使用します。
const originArray = ['one', 'two', 'three'];
const newItem = 4;
const newArray = originArray.concat(newItem);
元の配列の先頭に追加するには、以下のコードを使用します。
const originArray = ['one', 'two', 'three'];
const newItem = 0;
const newArray = (originArray.reverse().concat(newItem)).reverse();
上記の方法で、あなたは突然変異なしで配列の始め/終わりに追加します。
配列の先頭に要素を継続的に挿入する必要がある場合は、常にPush
を呼び出すのではなく、reverse
ステートメントに続けてunshift
を呼び出す方が速いです。
ベンチマークテスト: http://jsben.ch/kLIYf
splice
を使用して、最初に要素を配列に挿入します。
arrName.splice( 0, 0, 'newName1' );