Bir dizinin başına eleman ekleme veya ekleme ihtiyacım var.
Örneğin, dizim aşağıdaki gibi görünüyorsa:
[23, 45, 12, 67]
Ve AJAX çağrımdan gelen yanıt 34
, güncellenmiş dizinin aşağıdaki gibi olmasını istiyorum:
[34, 23, 45, 12, 67]
Şu anda bu şekilde yapmayı planlıyorum:
var newArray = [];
newArray.push(response);
for (var i = 0; i < theArray.length; i++) {
newArray.push(theArray[i]);
}
theArray = newArray;
delete newArray;
Bunu yapmanın daha iyi bir yolu var mı? Javascript'in bunu yapan herhangi bir yerleşik işlevi var mı?
Benim yöntemimin karmaşıklığı O(n)
dir ve daha iyi uygulamaları görmek gerçekten ilginç olacaktır.
unshift][1] kullanın. Bu [
push`]2 gibidir, ancak elemanları dizinin sonu yerine başına ekler.
unshift
/push
- bir dizinin başına/sonuna eleman eklershift
/pop
- bir dizinin ilk/son elemanını kaldırır ve döndürürBasit bir diyagram...
unshift -> array <- push
shift <- array -> pop
ve grafik:
add remove start end
push X X
pop X X
unshift X X
shift X X
MDN Array belgelerine göz atın]3. Bir diziden eleman itme/çekme yeteneğine sahip olan hemen hemen her dil, aynı zamanda eleman kaydırma/çekme (bazen push_front
/pop_front
olarak da adlandırılır) yeteneğine de sahip olacaktır, bunları asla kendiniz uygulamak zorunda kalmamalısınız.
Yorumlarda belirtildiği gibi, orijinal dizinizi değiştirmekten kaçınmak istiyorsanız, iki veya daha fazla diziyi bir araya getiren concat
kullanabilirsiniz. Bunu, tek bir elemanı mevcut bir dizinin önüne veya arkasına işlevsel olarak itmek için kullanabilirsiniz; bunu yapmak için yeni elemanı tek elemanlı bir diziye dönüştürmeniz gerekir:
const dizi = [ 3, 2, 1 ]
const newFirstElement = 4
const newArray = [newFirstElement].concat(array) // [ 4, 3, 2, 1 ]
concatayrıca öğeleri ekleyebilir. concat
argümanları herhangi bir türde olabilir; zaten bir dizi değillerse, örtük olarak tek elemanlı bir diziye sarılırlar:
const dizi = [ 3, 2, 1 ]
const newLastElement = 0
// Bu satırların her ikisi de eşdeğerdir:
const newArray1 = array.concat(newLastElement) // [ 3, 2, 1, 0 ]
const newArray2 = array.concat([newLastElement]) // [ 3, 2, 1, 0 ]
Hızlı Bilgi Sayfası:
Shift/unshift ve push/pop terimleri, en azından C'de programlamaya aşina olmayan kişiler için biraz kafa karıştırıcı olabilir.
Eğer terminolojiye aşina değilseniz, burada hatırlaması daha kolay olabilecek alternatif terimlerin hızlı bir çevirisini bulabilirsiniz:
* array_unshift() - (aka Prepend ;; InsertBefore ;; InsertAtBegin )
* array_shift() - (aka UnPrepend ;; RemoveBefore ;; RemoveFromBegin )
* array_push() - (aka Append ;; InsertAfter ;; InsertAtEnd )
* array_pop() - (aka UnAppend ;; RemoveAfter ;; RemoveFromEnd )