Saya memiliki kebutuhan untuk menambahkan atau menambahkan elemen pada awal array.
Misalnya, jika array saya terlihat seperti di bawah ini:
[23, 45, 12, 67]
Dan respon dari AJAX panggilan 34
, aku ingin diperbarui array menjadi seperti berikut:
[34, 23, 45, 12, 67]
Saat ini saya berencana untuk 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 hal ini? Apakah Javascript memiliki fungsi built-in yang melakukan hal ini?
Kompleksitas dari metode saya adalah O(n)
dan itu akan menjadi benar-benar menarik untuk melihat lebih baik implementasi.
Gunakan unshift
. It's seperti push
, kecuali ia menambahkan elemen ke awal array, bukan akhir.
unshift
/push
- menambahkan elemen ke awal/akhir arrayshift
/pop
- hapus dan kembali pertama/elemen terakhir dari arraySebuah diagram sederhana yang...
unshift -> array <- push
shift <- array -> pop
dan grafik:
add remove start end
push X X
pop X X
unshift X X
shift X X
Check out MDN Array dokumentasi. Hampir setiap bahasa yang memiliki kemampuan untuk push/pop elemen-elemen dari suatu array juga akan memiliki kemampuan untuk unshift/shift (kadang-kadang disebut push_front
/pop_front
) elemen, yang harus anda tidak pernah harus menerapkan ini sendiri.
Seperti yang ditunjukkan di komentar, jika anda ingin menghindari bermutasi asli array, anda dapat menggunakan concat
, yang menggabungkan dua atau lebih array bersama-sama. Anda dapat menggunakan ini untuk fungsional mendorong satu elemen ke depan atau kembali dari suatu array yang ada; untuk melakukannya, anda perlu untuk mengubah elemen menjadi satu elemen array:
``javascript const array = [ 3, 2, 1 ]
const newFirstElement = 4
const newArray = [newFirstElement].concat(array) // [ 4, 3, 2, 1 ] ``
concat
juga dapat menambahkan item. Argumen untuk concat
bisa dari jenis apa pun; mereka secara implisit dibungkus satu-elemen array, jika mereka tidak sudah array:
``javascript const array = [ 3, 2, 1 ]
const newLastElement = 0
// Kedua garis-garis ini adalah ekuivalen: const newArray1 = array.concat(newLastElement) // [ 3, 2, 1, 0 ] const newArray2 = array.concat([newLastElement]) // [ 3, 2, 1, 0 ] ``
...
:DEMO
var arr = [23, 45, 12, 67];
arr = [34, ...arr]; // RESULT : [34,23, 45, 12, 67]
console.log(arr)
Cara lain untuk melakukan itu melalui concat
var arr = [1, 2, 3, 4, 5, 6, 7];
console.log([0].concat(arr));
Perbedaan antara concat
dan unshift
itu concat
mengembalikan sebuah array baru. Kinerja antara mereka bisa ditemukan di sini.
function fn_unshift() {
arr.unshift(0);
return arr;
}
function fn_concat_init() {
return [0].concat(arr)
}
Berikut ini adalah hasil uji
Cheatsheet:
Syarat shift/unshift dan push/pop bisa menjadi sedikit membingungkan, setidaknya untuk orang-orang yang mungkin tidak akrab dengan pemrograman C.
Jika anda tidak akrab dengan istilah, berikut adalah terjemahan dari istilah alternatif, yang mungkin lebih mudah untuk 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 )
Sebenarnya, semua unshift
/push
dan shift
/pop
bermutasi asal array.
The unshift
/push
menambahkan item ke ada array dari mulai/akhir dan shift
/pop
menghapus item dari awal/akhir dari array.
Tapi ada cara untuk menambahkan item ke array tanpa mutasi. hasilnya adalah array baru, untuk menambahkan ke akhir array menggunakan kode di bawah ini:
const originArray = ['one', 'two', 'three'];
const newItem = 4;
const newArray = originArray.concat(newItem);
Untuk menambah begin asli array menggunakan kode di bawah ini:
const originArray = ['one', 'two', 'three'];
const newItem = 0;
const newArray = (originArray.reverse().concat(newItem)).reverse();
Dengan cara di atas, anda tambahkan ke awal/akhir dari array tanpa mutasi.
var array = [23, 45, 12, 67];
array.unshift(11);
alert(array);
Jika anda perlu untuk terus-menerus menyisipkan sebuah elemen pada awal array, itu adalah lebih cepat untuk menggunakan push
pernyataan diikuti dengan panggilan untuk mundur
, alih-alih memanggil unshift
sepanjang waktu.
Benchmark test: http://jsben.ch/kLIYf
Menggunakan sambatan
kita menyisipkan sebuah elemen ke array di begnning:
js arrName.sambatan( 0, 0, 'newName1' );