Membandingkan tatasusunan dalam JavaScript boleh menjadi tugas biasa dan adalah penting untuk melakukannya dengan berkesan. Pengendali perbandingan mudah, ==, mengembalikan palsu walaupun tatasusunan mengandungi nilai yang sama. Ini kerana ia menyemak kesamaan rujukan, bukannya kesaksamaan nilai.
Untuk membandingkan tatasusunan dengan cekap, pendekatan biasa adalah untuk menggelungkan setiap elemen dan membandingkannya. Berikut ialah pelaksanaan yang dioptimumkan bagi pendekatan ini:
Array.prototype.equals = function(array) { if (!array) return false; if (this === array) return true; if (this.length !== array.length) return false; for (let i = 0; i < this.length; i++) { if (this[i] instanceof Array && array[i] instanceof Array) { if (!this[i].equals(array[i])) return false; } else if (this[i] != array[i]) { return false; } } return true; };
Walaupun pendekatan di atas cekap, ia melibatkan lelaran gelung. Alternatifnya ialah menggunakan JSON.stringify untuk menukar tatasusunan kepada rentetan dan kemudian membandingkan rentetan. Walau bagaimanapun, ini tidak secekap kaedah perbandingan langsung.
Anda boleh melaksanakan fungsi tersuai yang disesuaikan untuk membandingkan tatasusunan dengan cekap sambil mengendalikan tatasusunan bersarang:
function compareArrays(arr1, arr2) { if (arr1.length !== arr2.length) return false; for (let i = 0; i < arr1.length; i++) { if (Array.isArray(arr1[i]) && Array.isArray(arr2[i])) { if (!compareArrays(arr1[i], arr2[i])) return false; } else if (arr1[i] !== arr2[i]) { return false; } } return true; }
Fungsi ini memanfaatkan kaedah perbandingan yang dioptimumkan untuk kedua-dua biasa dan bersarang tatasusunan.
Membandingkan objek juga memerlukan pendekatan tersuai, kerana ia dihantar melalui rujukan dan .equals tidak tersedia secara asli. Berikut ialah pelaksanaan untuk perbandingan objek:
Object.prototype.equals = function(object2) { for (let propName in this) { if (!this.hasOwnProperty(propName) || !this[propName]) continue; if (this[propName] instanceof Array && object2[propName] instanceof Array) { if (!compareArrays(this[propName], object2[propName])) return false; } else if (this[propName] instanceof Object && object2[propName] instanceof Object) { if (!this[propName].equals(object2[propName])) return false; } else if (this[propName] !== object2[propName]) { return false; } } for (let propName in object2) { if (!object2.hasOwnProperty(propName) || !object2[propName]) continue; if (!this.hasOwnProperty(propName) || this[propName] !== object2[propName]) { return false; } } return true; };
Dengan melaksanakan fungsi perbandingan tersuai ini, anda boleh membandingkan tatasusunan dan objek dalam JavaScript dengan cekap, memastikan perbandingan yang boleh dipercayai dan tepat.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membandingkan Tatasusunan dan Objek dengan Cekap dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!