Rumah > hujung hadapan web > tutorial js > Ringkasan kemahiran deduplication_javascript tatasusunan javascript

Ringkasan kemahiran deduplication_javascript tatasusunan javascript

WBOY
Lepaskan: 2016-05-16 15:11:57
asal
1448 orang telah melayarinya

Kata Pengantar

Baru-baru ini, untuk menukar kerja dan bersedia untuk temu duga, saya mula menyemak dan menyemak pengetahuan berkaitan JavaScript Petang semalam, saya memikirkan kaedah berkaitan deduplikasi tatasusunan, jadi saya hanya menyusun beberapa artikel algoritma JavaScript untuk. Penggunaan masa hadapan. Siri artikel ini tidak pasti Nombor, masa yang tidak pasti, saya akan menulis di mana sahaja saya fikir, tiada jaminan ketepatan, tiada jaminan kecekapan tinggi, hanya bercakap tentang pemahaman peribadi, jika ada kesilapan, sila betulkan.

Mengenai penyingkiran pendua

Penyahduplikasi tatasusunan ialah titik pemeriksaan algoritma biasa, dan cara untuk mencapai penyahduplikasian tidak lebih daripada melalui keunikan dan bukan keunikan. Ringkasnya, ini bermaksud memilih yang unik atau memadamkan yang bukan unik. Semua algoritma berikut dinamakan secara membuta tuli oleh saya, sila abaikan mereka.

Padanan gelung untuk mengalih keluar pendua

Seperti namanya, setiap elemen dalam tatasusunan dibandingkan dengan tatasusunan yang menyimpan elemen Apabila menghadapi elemen tidak berulang, ia dimasukkan ke dalam tatasusunan baharu sehingga penghujung gelung juga boleh dipanggil pemadanan gelung berganda. Mengalih keluar pendua ialah cara paling mudah yang boleh difikirkan oleh semua orang.

Kod pelaksanaan:

var arr=[1,3,4,56,3,7,9,7];
var result=[];
//匹配
function isMatch(array,n){
  for(var i=0;i<array.length;i++){
    if(array[i]==n){
      return true;
    }
  }
  return false;
};
//验证所有元素
function unqiue(array){
  for(var i=0;i<array.length;i++){
    if(!isMatch(result,array[i])){
      result.push(array[i]);
    }
  }
  return result;
};

console.log(unqiue(arr));

Salin selepas log masuk

Nota: Terdapat pepijat dalam kaedah di atas Apabila terdapat nombor dan rentetan berangka, nombor dan rentetan berangka tidak dibezakan. Oleh kerana kesamaan berganda "==" digunakan dalam fungsi padanan isMatch() dan jenis elemen tidak disahkan, kongruen "===" sebenarnya harus digunakan.
Kod yang diubah suai adalah seperti berikut:

var arr=[1,3,4,56,3,'1',7,9,7];
var result=[];
//匹配
function isMatch(array,n){
  for(var i=0;i<array.length;i++){
    if(array[i]===n){
      return true;
    }
  }
  return false;
};
//验证所有元素
function unqiue(array){
  for(var i=0;i<array.length;i++){
    if(!isMatch(result,array[i])){
      result.push(array[i]);
    }
  }
  return result;
};

console.log(unqiue(arr));

Salin selepas log masuk

Kebaikan dan keburukan algoritma:

Kelebihan:

Pelaksanaan mudah dan pemikiran intuitif

Kelemahan:

Ketidakcekapan

deduplikasi JSON/deduplikasi objek/deduplikasi kamus

Deduplikasi JSON, secara ringkasnya, ialah menggunakan keunikan kekunci objek Objek untuk menukar elemen tatasusunan kepada JSON atau nilai kunci objek. Nilai JSON menyimpan indeks indeks tatasusunan, dan kemudian melakukan for dalam gelung pada objek JSON dan menyimpannya dalam tatasusunan baharu.

Array, JSON dan {} adalah semua Objek, jadi algoritma ini boleh dilaksanakan menggunakan mana-mana satu.

Kod pelaksanaan:

Mod tatasusunan:

var arr=[1,3,4,56,3,'1',7,9,7];
function unqiue(array){
  var cache=[];
  var result=[];
   //将数组元素转为对象的key
  for(var i=0;i<array.length;i++){
    cache[array[i]]=i;
  };
  
  //存储key(实际的数组元素)
  for(key in cache){
    result.push(key);
  };
  
  return result;
}
  
console.log(unqiue(arr));
Salin selepas log masuk

Mod JSON:

var arr=[1,3,4,56,3,'1',7,9,7];
function unqiue(array){
  var cache={};
  var result=[];
   //将数组元素转为对象的key
  for(var i=0;i<array.length;i++){
    cache[array[i]]=i;
  };
  
  //存储key(实际的数组元素)
  for(key in cache){
    result.push(key);
  };
  
  return result;
}
  
console.log(unqiue(arr));
Salin selepas log masuk

Mod objek:

var arr=[1,3,4,56,3,'1',7,9,7];
function unqiue(array){
  var cache=new Object();
  var result=[];
   //将数组元素转为对象的key
  for(var i=0;i<array.length;i++){
    cache[array[i]]=i;
  };
  
  //存储key(实际的数组元素)
  for(key in cache){
    result.push(key);
  };
  
  return result;
}
  
console.log(unqiue(arr));
Salin selepas log masuk

Kebaikan dan keburukan algoritma:

Kelebihan:

Mudah

Sangat cekap

Kelemahan:

1 Menukar jenis elemen tatasusunan ()
2. Terdapat pepijat (tidak lebih daripada membezakan antara nombor dan rentetan angka)

Deduplikasi rekursif baris gilir

Saya memikirkannya untuk masa yang lama malam tadi dan terfikir untuk menggunakan baris gilir Mula-mula menyusun tatasusunan ke dalam baris gilir dalam tertib menaik atau menurun, supaya elemen yang sama berada di rantau, dan kemudian padan dari penghujung. baris gilir ke hadapan Jika perlawanan berjaya, padamkan penghujung baris gilir , dan kemudian elemen sebelumnya sepadan dengan elemen sebelumnya. Selepas keseluruhan pemadanan selesai, elemen yang selebihnya ialah baris gilir pendua.

var arr=[6, 4, 6, 9, '6', 13, 56, 9, ,'11',1, 8, '7', 17, 5, 45, 3, 7];

function unqiue(array){
  //排序数组,形成队列
  array.sort(function(m,n){return m-n;});
  ////排序后,队尾向前对比,如果相同,删除队尾,依次类推
  function loop(Index){
    if(Index>=1){
      if(array[Index]===array[Index-1]){
        arr.splice(Index,1);
      }
      loop(Index-1);
    }
    
  }
  loop(array.length-1);
  return array;
}

console.log(unqiue(arr));

Salin selepas log masuk

Kebaikan dan keburukan algoritma:

Kelebihan:

Kecekapan yang lebih tinggi

Kelemahan:

Bukan yang paling cekap

Kaedah penyahduplikasi INDEXOF

Tentukan sama ada penyemak imbas menyokong indexOf ialah kaedah baharu ecmaScript5 Ia tidak disokong oleh IE8 dan ke bawah (termasuk IE8, IE8 hanya menyokong sebahagian daripada ecma5)

if (!Array.prototype.indexOf){ 
// 新增indexOf方法 
Array.prototype.indexOf = function(item){ 
var result = -1, a_item = null; 
if (this.length == 0){ 
return result; 
} 
for(var i = 0, len = this.length; i < len; i++){ 
a_item = this[i]; 
if (a_item === item){ 
result = i; 
break; 
} 
} 
return result; 
} 
} 
Salin selepas log masuk

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan