javascript - Mengurutkan ulang array
Katakanlah, saya memiliki sebuah array yang terlihat seperti ini:
var playlist = [
{artist:"Herbie Hancock", title:"Thrust"},
{artist:"Lalo Schifrin", title:"Shifting Gears"},
{artist:"Faze-O", title:"Riding High"}
];
Bagaimana saya bisa memindahkan sebuah elemen ke posisi lain?
Saya ingin memindahkan misalnya, {artist:"Lalo Schifrin", title:"Shifting Gears"} ke akhir.
Saya mencoba menggunakan splice, seperti ini:
var tmp = playlist.splice(2,1);
playlist.splice(2,0,tmp);
Tapi itu tidak berhasil.
Jawaban #1
Sintaks Array.splice adalah:
yourArray.splice(index, howmany, element1, /*.....,*/ elementX);
Di mana :
- index adalah posisi dalam array dari mana Anda ingin mulai menghapus elemen
- howmany adalah berapa banyak elemen yang ingin Anda hapus dari index
- element1, ..., elementX adalah elemen yang ingin Anda sisipkan dari posisi index.
Ini berarti bahwa splice() dapat digunakan untuk menghapus elemen, menambahkan elemen, atau mengganti elemen dalam sebuah array, tergantung pada argumen yang Anda berikan.
Perhatikan bahwa itu mengembalikan array dari elemen yang dihapus.
Sesuatu yang bagus dan umum akan seperti:
Array.prototype.move = function (from, to) {
this.splice(to, 0, this.splice(from, 1)[0]);
};
Lalu cukup gunakan:
var ar = [1,2,3,4,5];
ar.move(0,3);
alert(ar) // 2,3,4,1,5
Diagram :
Jawaban #2
Jika Anda mengetahui indeksnya, Anda bisa dengan mudah menukar elemennya, dengan fungsi sederhana seperti ini:
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"}]
Indeks array hanyalah properti dari objek array, jadi Anda bisa menukar nilainya.
Jawaban #3
Dengan ES6 Anda bisa melakukan sesuatu seperti ini:
const swapPositions = (array, a ,b) => {
[array[a], array[b]] = [array[b], array[a]]
}
let array = [1,2,3,4,5];
swapPositions(array,0,1);
/// => [2, 1, 3, 4, 5]
Jawaban #4
Berikut versi yang tidak dapat diubah bagi mereka yang tertarik:
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;
}, []);
}
Jawaban #5
Anda selalu bisa menggunakan metode sort, jika Anda tidak tahu di mana rekaman itu saat ini:
playlist.sort(function (a, b) {
return a.artist == "Lalo Schifrin"
? 1 // Move it down the list
: 0; // Keep it the same
});
