Mengenal pasti Pendua dalam Tatasusunan JavaScript dengan Prototaip
Dalam JavaScript, selalunya perlu mengalih keluar nilai pendua daripada tatasusunan. Satu pendekatan popular melibatkan memanjangkan prototaip Tatasusunan dengan fungsi 'getUnique' tersuai, seperti yang dilihat di bawah:
Array.prototype.getUnique = function() { var o = {}, a = [], i, e; for (i = 0; e = this[i]; i++) {o[e] = 1}; for (e in o) {a.push (e)}; return a; }
Walau bagaimanapun, skrip ini menghadapi masalah apabila tatasusunan mengandungi nilai sifar. Untuk memahami sebabnya, mari kita periksa masalah secara terperinci.
Fungsi 'getUnique' menggunakan objek 'o' sebagai storan sementara untuk nilai. Ini berfungsi dengan baik untuk nilai yang boleh berfungsi sebagai kunci objek, seperti rentetan atau nombor selain daripada sifar. Walau bagaimanapun, JavaScript menganggap nombor sifar ('0') sebagai nilai palsu, yang bermaksud 'o[0]' menilai kepada 'palsu'.
Apabila mengulangi kekunci objek, nilai palsu dilangkau, mengakibatkan peninggalan sifar daripada tatasusunan unik yang terhasil. Tingkah laku ini berbeza daripada operasi yang dimaksudkan, iaitu menganggap sifar sebagai nilai unik yang sah.
Penyelesaian Asli dengan Penapis
Dalam persekitaran JavaScript moden (ES5 dan ke atas) , pendekatan yang lebih ringkas dan cekap tersedia menggunakan kaedah 'penapis':
function onlyUnique(value, index, array) { return array.indexOf(value) === index; } // usage example: var a = ['a', 1, 'a', 2, '1']; var unique = a.filter(onlyUnique); console.log(unique); // ['a', 1, 2, '1']
Kaedah 'penapis' mengambil fungsi panggil balik yang mengembalikan 'benar' untuk setiap elemen unik untuk dimasukkan ke dalam tatasusunan baharu. Dalam kes ini, panggilan balik kami menyemak sama ada indeks elemen semasa dalam tatasusunan sepadan dengan kedudukannya dalam panggilan balik, mengesahkan keunikannya. Pendekatan ini tidak bergantung pada kekunci objek dan mengendalikan nilai sifar dengan betul.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengeluarkan Nilai Duplikat dengan Cekap daripada Tatasusunan JavaScript, Termasuk Sifar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!