Demek, şöyle bir dizi var?yeniden sıralama diziler
Örneğin, {artist:"Lalo Schifrin", title:"Shifting Gears"}
sonuna taşımak istiyorum.
var tmp = playlist.splice(2,1);
playlist.splice(2,0,tmp);
Ama çalışmıyor.
Demek, şöyle bir dizi var?yeniden sıralama diziler
Örneğin, {artist:"Lalo Schifrin", title:"Shifting Gears"}
sonuna taşımak istiyorum.
var tmp = playlist.splice(2,1);
playlist.splice(2,0,tmp);
Ama çalışmıyor.
eleman çıkarmadan ekleme çağrısında ilk parametre olarak 1 Değişim 2: rekor şu anda nerede olduğunu bilmiyorsanız
var tmp = playlist.splice(1,1);
playlist.splice(2,0,tmp);
, playlist.splice (2,0, tmp [0]) olmalıdır; Sağ? – Crisboot
Hep, sıralama yöntemini kullanabilirsiniz:
Eğer dizinleri biliyorsanızplaylist.sort(function (a, b) {
return a.artist == "Lalo Schifrin"
? 1 // Move it down the list
: 0; // Keep it the same
});
Zeki. Bunu sevdim. – Gaelan
Geri dönüşü (terim == "Lalo Schifrin") ' – Funkodebat
@ Funko hakkında ne yapabilirsiniz? –
kolayca bu gibi basit bir fonksiyonu ile, elemanları takas olabilir:
function swapElement(array, indexA, indexB) {
var tmp = array[indexA];
array[indexA] = array[indexB];
array[indexB] = tmp;
}
swapElement(playlist, 1, 2);
// [{"artist":"Herbie Hancock","title":"Thrust"},
// {"artist":"Faze-O","title":"Riding High"},
// {"artist":"Lalo Schifrin","title":"Shifting Gears"}]
Dizi dizinleri yalnızca dizi nesnesinin özellikleridir, bu nedenle değerlerini değiştirebilirsiniz.
Array.splice
sözdizimi
olduğunu :
yourArray.splice(index, howmany, element1, /*.....,*/ elementX);
: kaç olduğunu howmany
Bu, splice()
öğesinin, geçiş yaptığınız bağımsız değişkenlere bağlı olarak öğeleri kaldırmak, eleman eklemek veya öğeleri bir dizide değiştirmek için kullanılabileceği anlamına gelir.
Kaldırılan öğelerin bir dizisini döndürdüğünü unutmayın.
güzel ve jenerik bir şey olacaktır:
Array.prototype.move = function (from, to) {
this.splice(to, 0, this.splice(from, 1)[0]);
};
Sonra sadece kullanın:
var ar = [1,2,3,4,5];
ar.move(0,3);
alert(ar) // 2,3,4,1,5
Şema:
Bu iyi bir yanıttır ve ekleme() içindeki ek yeri() işi iyi yapar. Bununla birlikte, Array prototipine bir move() yönteminin eklenmesinin "Maymun Yaması" olarak adlandırıldığına ve tipik olarak kötü uygulama olarak kabul edildiğine dikkat edilmelidir. http://stackoverflow.com/questions/5741877/is-monkey-patching-really-that-bad –
bu deneyin:
Eğer sadece hiç dizinin sonuna keyfi bir pozisyondan bir öğe taşımak istiyorsanız, bu çalışması gerekir:
function toEnd(list, position) {
list.push(list.splice(position, 1));
return list;
}
Sonuna bazı keyfi pozisyona birden fazla öğe taşımak istiyorsanız, yapabileceğiniz:
function toEnd(list, from, count) {
list.push.apply(list, list.splice(from, count));
return list;
}
bazı keyfi pozisyona bazı keyfi pozisyona birden fazla öğe taşımak isterseniz
, deneyin:function move(list, from, count, to) {
var args = [from > to ? to : to - count, 0];
args.push.apply(args, list.splice(from, count));
list.splice.apply(list, args);
return list;
}
ilgilenenler için değişmez bir versiyonudur: Ne demek "çalışmıyor" yok
function immutableMove(arr, from, to) {
return arr.reduce((prev, current, idx, self) => {
if (from === to) {
prev.push(current);
}
if (idx === from) {
return prev;
}
if (from < to) {
prev.push(current);
}
if (idx === to) {
prev.push(self[from]);
}
if (from > to) {
prev.push(current);
}
return prev;
}, []);
}
- bu bir hata atmak yok, hiçbir şey değişir mi, bu bir şekilde diziyi değiştirir sen niyetim yoktu Bana mantıklı görünüyor. –