web-dev-qa-db-ja.com

Javascriptの配列の先頭に新しい配列要素を追加する方法を教えてください。

配列の先頭に要素を追加または追加する必要があります。

たとえば、配列が次のようになっているとします。

[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)であり、より良い実装を見ることは本当に興味深いでしょう。

1363
Moon

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と呼ばれることもあります)。これらを自分で実装する必要はありません。

2414
meagar

array operations image

var a = [23, 45, 12, 67];
a.unshift(34);
console.log(a); // [34, 23, 45, 12, 67]

1273
Maksym

ES6では、拡散演算子...を使用します。

デモ

var arr = [23, 45, 12, 67];
arr = [34, ...arr]; // RESULT : [34,23, 45, 12, 67]

console.log(arr)

171
Abdennour TOUMI

concatを介してそれを行うための別の方法

var arr = [1, 2, 3, 4, 5, 6, 7];
console.log([0].concat(arr));

concatunshiftの違いは、concatが新しい配列を返すことです。それらの間のパフォーマンスは ここ で見つかるでしょう。 

function fn_unshift() {
  arr.unshift(0);
  return arr;
}

function fn_concat_init() {
  return [0].concat(arr)
}

これがテスト結果です

enter image description here

62
zangw

クイックチートシート:  

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 ) 
42
dreftymac

あなたは配列を持っている:var arr = [23, 45, 12, 67];

先頭に項目を追加するには、spliceを使用します。

var arr = [23, 45, 12, 67];
arr.splice(0, 0, 34)
console.log(arr);

15
ozimax06

Push()は、配列の末尾に新しい要素を追加します。
pop()は、配列の末尾から要素を削除します。

unshift()は、配列の先頭に新しい要素を追加します。
shift()は、配列の先頭から要素を削除します。

theArray.unshift(response)を使う

9
Harunur Rashid

var testdata = new Array();
testdata = [23, 45, 12, 67];
testdata = [34, ...testdata]; 
console.log(testdata)

5
Tirkesh Turkesh
var array = [23, 45, 12, 67];  
array.unshift(11);  
alert(array);
4
techdeepak

突然変異なし

実際には、すべての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();

上記の方法で、あなたは突然変異なしで配列の始め/終わりに追加します。

3
AmerllicA

配列の先頭に要素を継続的に挿入する必要がある場合は、常にPushを呼び出すのではなく、reverseステートメントに続けてunshiftを呼び出す方が速いです。

ベンチマークテスト: http://jsben.ch/kLIYf

3
Jenny O'Reilly

spliceを使用して、最初に要素を配列に挿入します。

arrName.splice( 0, 0, 'newName1' );
0
Srikrushna Pal