Burada bu soruya gerçekten yaratıcı cevaplar var. İşte dizilerle yeni başlayanlar için basit bir çözüm. İstenirse ECMAScript 3 uyumlu tarayıcılara kadar çalışabilir hale getirilebilir.
Başlamadan önce ekleme hakkında bir şeyler öğrenin.
Mozilla Geliştirici Ağı: Array.prototype.splice ()
İlk olarak, iki önemli formunu anlayın .splice()
.
let a1 = [1,2,3,4],
a2 = [1,2];
Yöntem 1) İstenen bir dizinden başlayarak x (deleteCount) öğelerini kaldırın.
let startIndex = 0,
deleteCount = 2;
a1.splice(startIndex, deleteCount);
Yöntem 2) İstenen bir başlangıç dizininden sonra dizinin sonuna kadar öğeleri kaldırın.
a1.splice(2);
Kullanarak .splice()
, a1
yukarıdaki iki formdan birini kullanarak baş ve kuyruk dizilerini ayırmak bir amaç olabilir .
Yöntem # 1 kullanıldığında, dönüş değeri başlık ve a1
kuyruk olur.
let head = a1.splice(startIndex, deleteCount);
Şimdi, bir çırpıda düştü, baş, gövde ( a2
) ve kuyruğu birleştirin
[].concat(head, a2, a1);
Dolayısıyla, bu çözüm şimdiye kadar sunulan diğer çözümlerden çok gerçek dünyaya benziyor. Legolarla yapacağın bu değil mi? ;-) Burada yöntem # 2 kullanılarak yapılan bir işlev var.
function insertArray(target, body, startIndex)
{
let tail = target.splice(startIndex);
return [].concat(target, body, tail);
}
let newArray = insertArray([1, 2, 3, 4], ["a", "b"], 2);
Daha kısa:
function insertArray(target, body, startIndex)
{
return [].concat(target, body, target.splice(startIndex));
}
Daha güvenli:
function insertArray(target, body, startIndex)
{
const ARRAY_START = 0,
ARRAY_END = target.length - 1,
ARRAY_NEG_END = -1,
START_INDEX_MAGNITUDE = Math.abs(startIndex);
if (startIndex === ARRAY_START) {
throw new Error("The value for startIndex cannot be zero (0).");
}
if (startIndex === ARRAY_END || startIndex === ARRAY_NEG_END) {
throw new Error("The startIndex cannot be equal to the last index in target, or -1.");
}
if (START_INDEX_MAGNITUDE >= ARRAY_END) {
throw new Error("The absolute value of startIndex must be less than the last index.");
}
return [].concat(target, body, target.splice(startIndex));
}
Bu çözümün avantajları şunları içerir:
1) Çözüme basit bir öncül hakimdir - boş bir diziyi doldurun.
2) Baş, vücut ve kuyruk terminolojisi doğaldır.
3) Çift çağrı yok .slice()
. Hiç dilimleme yok.
4) Hayır .apply()
. Son derece gereksiz.
5) Yöntem zincirlemesinden kaçınılır.
6) ECMAScript 3 ve 5'te veya var
yerine kullanarak basitçe çalışır .let
const
** 7) Sunulan diğer çözümlerden farklı olarak vücuda tokatlanacak bir baş ve kuyruk olmasını sağlar. Sınırlardan önce veya sonra bir dizi ekliyorsanız, en azından kullanıyor olmalısınız .concat()
!!!!
Not: Yayılma opearatörünün kullanılması ...
, tüm bunların gerçekleştirilmesini çok daha kolay hale getirir.