Pertanyaan Bagaimana saya bisa menambahkan elemen larik baru di awal larik di JavaScript?


Saya harus menambahkan atau menambahkan elemen di awal larik.

Sebagai contoh, jika array saya terlihat seperti di bawah ini:

[23, 45, 12, 67]

Dan respon dari panggilan AJAX saya adalah 34Saya ingin array yang diperbarui menjadi seperti berikut:

[34, 23, 45, 12, 67]

Saat ini saya berencana melakukannya seperti ini:

var newArray = [];
newArray.push(response);

for (var i = 0; i < theArray.length; i++) {
    newArray.push(theArray[i]);
}

theArray = newArray;
delete newArray;

Apakah ada cara yang lebih baik untuk melakukan ini? Apakah JavaScript memiliki fungsi bawaan yang melakukan ini?

Kerumitan metode saya adalah O(n) dan itu akan sangat menarik untuk melihat implementasi yang lebih baik.


1135
2017-11-10 00:35


asal


Jawaban:


Menggunakan unshift. Itu seperti push, kecuali itu menambahkan elemen ke awal array bukan akhir.

  • unshift/push - tambahkan elemen ke awal / akhir array
  • shift/pop  - hapus dan kembalikan elemen pertama / terakhir dari dan larik

Diagram sederhana ...

   unshift -> array <- push
   shift   <- array -> pop

dan bagan:

          add  remove  start  end
   push    X                   X
    pop           X            X
unshift    X             X
  shift           X      X

Lihat Dokumentasi MDN Array. Hampir setiap bahasa yang memiliki kemampuan untuk mendorong / memasukkan elemen dari array juga akan memiliki kemampuan untuk tidak berpindah / bergeser (kadang-kadang disebut push_front/pop_front) elemen, Anda tidak harus menerapkan ini sendiri.


2125
2017-11-10 00:37



array operations image

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


1161
2017-11-10 00:40



Dengan ES6, gunakan operator spread ... :

DEMO

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

console.log(arr)


121
2017-09-16 12:26



Cara lain untuk melakukannya melalui concat

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

Perbedaan antara concat dan unshift Apakah itu concat mengembalikan larik baru. Pertunjukan di antara mereka bisa ditemukan sini.

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

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

Ini hasil tesnya

enter image description here


48
2018-02-19 10:56



Cheatsheet Cepat: 

Istilah shift / unshift dan push / pop dapat sedikit membingungkan, setidaknya untuk orang-orang yang mungkin tidak akrab dengan pemrograman di C.

Jika Anda tidak akrab dengan istilah tersebut, berikut adalah terjemahan singkat istilah alternatif, yang mungkin lebih mudah diingat:

* array_unshift()  -  (aka Prepend ;; InsertBefore ;; InsertAtBegin )     
* array_shift()    -  (aka UnPrepend ;; RemoveBefore  ;; RemoveFromBegin )

* array_push()     -  (aka Append ;; InsertAfter   ;; InsertAtEnd )     
* array_pop()      -  (aka UnAppend ;; RemoveAfter   ;; RemoveFromEnd ) 

38
2018-04-15 17:28



Anda memiliki larik: var arr = [23, 45, 12, 67];

Untuk menambahkan item ke awal, Anda ingin menggunakannya splice:

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


13
2018-04-20 19:19



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


1
2018-05-29 06:14



push() menambahkan elemen baru ke ujung array.
pop() menghapus elemen dari ujung array.

unshift() menambahkan elemen baru ke awal array.
shift() menghapus elemen dari awal array.

menggunakan theArray.unshift(response)


1
2018-05-30 08:57



Jika Anda perlu terus-menerus memasukkan elemen di awal array, itu lebih cepat untuk digunakan push pernyataan diikuti oleh panggilan ke reverse, bukannya menelepon unshift sepanjang waktu.

Uji patokan:  http://jsben.ch/kLIYf


1
2018-06-07 13:12



Menggunakan push, sambatan, dan nomor indeks kami memasukkan elemen ke array pada awalnya

arrName.push('newName1');
arrName.splice(0, 0,'newName1');
arrName[0] = 'newName1';

0
2018-06-28 19:54