Kaedah: 1. Gunakan pernyataan "[...new Set(arr)]"; 2. Gunakan pernyataan "Array.from(new Set(arr))" 3. Gunakan penapis dan indexOf functions; 4. Gunakan double untuk gelung untuk menyemak sama ada nilai tersebut diduakan. Jika terdapat pendua, gunakan push() untuk memadamnya.
Persekitaran pengendalian tutorial ini: sistem Windows 7, versi JavaScript 1.8.5, komputer Dell G3.
Kaedah 1: […Set baharu(arr)]
const arr = [1, 2, 3, 2, 3]; [...new Set(arr)]; // [1, 2, 3]
Kaedah 2: Array.from(Set baharu(arr) )
const arr = [1, 2, 3, 2, 3]; Array.from(new Set(arr)); // [1, 2, 3]
Memandangkan elemen dalam Set adalah unik, sama ada ia adalah nilai asal atau rujukan objek, penyahduplikasian boleh dicapai dengan menukar tatasusunan menjadi objek Set
Array.from Kaedah boleh menukar objek Set ke dalam tatasusunan.
Kaedah 3: Gunakan penapis indexOf
function unique(arr) { return arr.filter(function(item, index, arr) { //当前元素,在原始数组中的第一个索引==当前索引值,否则返回当前元素 return arr.indexOf(item, 0) === index; }); } var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}]; console.log(unique(arr)) //[1, "true", true, 15, false, undefined, null, "NaN", 0, "a", {…}, {…}]
Kaedah 4: Gandakan untuk gelung
Kaedah paling mudah untuk difahami , gelung luar merentasi elemen, dan gelung dalam menyemak sama ada terdapat pendua
Apabila terdapat nilai pendua, anda boleh menggunakan push() atau splice()
function distinct(a, b) { let arr = a.concat(b); for (let i=0, len=arr.length; i<len; i++) { for (let j=i+1; j<len; j++) { if (arr[i] == arr[j]) { arr.splice(j, 1); // splice 会改变数组长度,所以要将数组长度 len 和下标 j 减一 len--; j--; } } } return arr }
Tetapi ini Kaedah ini menggunakan lebih banyak ingatan dan paling kurang cekap
Kaedah 5: untuk...termasuk()
Berganda Versi yang dinaik taraf bagi gelung untuk Lapisan luar menggantikan gelung for dengan penyataan for...of, dan menukar gelung dalam kepada termasuk()
Pertama buat tatasusunan kosong Apabila termasuk() kembali false, Tolak elemen ke dalam tatasusunan kosong
Begitu juga, anda juga boleh menggunakan indexOf() untuk menggantikan includes()
function distinct(a, b) { let arr = a.concat(b) let result = [] for (let i of arr) { !result.includes(i) && result.push(i) } return result }
[Pembelajaran yang disyorkan : Tutorial JavaScript Terperinci]
Atas ialah kandungan terperinci Bagaimana untuk mengalih keluar pendua daripada tatasusunan javascript. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!