February 5, 2025 javascript
Cara Membandingkan Dua Array Apakah Sama di Javascript
Pada artikel kali ini akan dibahas cara membandingkan dua array apakah sama di javascript.
Cara yang akan dibahas adalah cara manual. Jika ingin cepat, gunakan library seperti lodash atau underscore js.
Langsung saja, berikut langkah-langkahnya.
Pertama, buat fungsi untuk membandingkan dua array. Fungsi ini menerima dua parameter berupa array.
function isEqual(a, b) {}
Pengecekan pertama untuk menentukan apakah kedua array sama adalah dengan membandingkan ukurannya. Jika berbeda berarti kedua array tersebut tidak sama. Gunakan length
untuk mendapatkan ukuran array.
function isEqual(a, b) {
return a.length === b.length
}
console.log(isEqual([1, 2, 3], [1, 2, 3, 4])) // false
console.log(isEqual([1, 2, 3], [1, 2, 3])) // true
console.log(isEqual([1, 2, 3], [4, 4, 3])) // true
Pengecekan berikutnya adalah membandingkan setiap elemen pada indeks yang sama di kedua array. Caranya dengan menggunakan method every
pada array pertama, setiap elemen pada array pertama dibandingkan dengan elemen pada array kedua sesuai indeksnya.
function isEqual(a, b) {
if (a.length !== b.length) {
return false;
}
return a.every((item, index) => item === b[index])
}
console.log(isEqual([1, 2, 3], [1, 2, 3, 4])) // false
console.log(isEqual([1, 2, 3], [4, 4, 3])) // false
console.log(isEqual([1, 2, 3], [1, 3, 2])) // false
console.log(isEqual([1, 2, 3], [1, 2, 3])) // true
Pada fungsi di atas, jika kedua array memiliki elemen yang sama tetapi urutannya berbeda, maka hasilnya akan false
. Jika ingin mengabaikan urutannya, urutkan array terlebih dahulu sebelum melakukan perbandingan. Untuk mengurutkan gunakan method sort
pada kedua array.
function isEqual(a, b) {
if (a.length !== b.length) {
return false;
}
const bSorted = [...b].sort((item, next) => item - next)
return [...a]
.sort((item, next) => item - next)
.every((item, index) => item === bSorted[index])
}
console.log(isEqual([1, 2, 3], [1, 2, 3, 4])) // false
console.log(isEqual([1, 2, 3], [4, 4, 3])) // false
console.log(isEqual([1, 2, 3], [1, 3, 2])) // true
console.log(isEqual([1, 2, 3], [1, 2, 3])) // true
console.log(isEqual(['a', 'b', 'c'], ['a', 'b', 'c'])) // true
console.log(isEqual(['a', 'b', 'c'], ['a', 'c', 'b'])) // false
Pada fungsi di atas hanya berfungsi untuk array dengan elemen berupa Number
. Jika ingin dibuat agar dapat menerima String
maka pindahkan sort ke parameter, sehingga fungsi sortnya menyesuaikan ketika fungsi dipanggil.
function isEqual(a, b, sortFn) {
if (a.length !== b.length) {
return false;
}
const bSorted = [...b].sort(sortFn)
return [...a].sort(sortFn)
.every((item, index) => item === bSorted[index])
}
function sortNumber(a, b) {
return a - b
}
function sortString(a, b) {
return a.localeCompare(b)
}
console.log(isEqual([1, 2, 3], [1, 2, 3, 4], sortNumber)) // false
console.log(isEqual([1, 2, 3], [4, 4, 3], sortNumber)) // false
console.log(isEqual([1, 2, 3], [1, 3, 2], sortNumber)) // true
console.log(isEqual([1, 2, 3], [1, 2, 3], sortNumber)) // true
console.log(isEqual(['a', 'b', 'c'], ['a', 'b', 'c'], sortString)) // true
console.log(isEqual(['a', 'b', 'c'], ['a', 'c', 'b'], sortString)) // true
Cara yang telah dibahas hanya dapat berfungsi untuk array dengan elemen bertipe data primitive seperti Number
, String
, dan Boolean
. Untuk array berisi Object
, array nested, dan yang lainnya, perlu langkah-langkah lebih lanjut.