Rumah >hujung hadapan web >tutorial js >Kemahiran pelaksanaan code_javascript traversal urutan terbalik JS

Kemahiran pelaksanaan code_javascript traversal urutan terbalik JS

WBOY
WBOYasal
2016-05-16 16:29:351694semak imbas

Kaedah traversal yang paling biasa digunakan ialah pernyataan for (terdapat juga kaedah rekursif dan while). Apabila kita berulang melalui tatasusunan, kita biasanya melakukan ini:

Salin kod Kod adalah seperti berikut:

var arr = [1,2,3,4,5,6,7,8,9,10];
for(var i=0,total=arr.length;i console.log(i,arr[i]);
}

Ini ialah kaedah traversal yang paling biasa digunakan: traversal ke hadapan. Ia pergi dari item pertama ke item terakhir dalam tatasusunan.

Lalu mengapa drama hari ini juga menyebut traversal urutan terbalik?

Di sini saya perlu menyebut salah satu modul yang paling biasa digunakan antara komponen yang ditulis dalam drama kecil: acara. Digunakan untuk mencipta model acara tersuai, mengendalikan pemantauan dan pencetusan acara, mod penerbitan dan langganan (pub/sub) yang paling mudah. Oleh kerana baru-baru ini mendapati bahawa terdapat bahaya limpahan ingatan yang tersembunyi, kaedah tidak terikat pada asas asal perlu ditambah.

Oleh kerana fungsi panggil balik dengan nama acara yang sama diletakkan dalam tatasusunan yang sama, untuk menyahikat, anda hanya perlu mencari fungsi panggil balik yang sepadan dalam tatasusunan (fungsi panggil balik yang sama mungkin diikat beberapa kali) dan alih keluarnya.

Ia adalah keperluan yang sangat mudah, jadi adalah wajar untuk menulis kod yang serupa dengan yang berikut:

Salin kod Kod adalah seperti berikut:

//Alih keluar 2
daripada tatasusunan var arr = [1,2,2,2,2,1,1,2,2];
for(var i=0,total=arr.length;i if(arr[i] == 2){
//Memenuhi syarat, keluarkan
arr.splice(i,1);
}
}
console.log(arr);

Adakah terdapat sebarang kod biasa, tetapi hasil keluaran akhir ialah: [1, 2, 2, 1, 1, 2]. Jelas sekali hasil pelaksanaan tidak seperti yang diharapkan.

Apa masalahnya?

Selepas analisis yang teliti, saya mendapati bahawa masalahnya terletak pada setiap kali perlawanan berjaya, selepas operasi penyingkiran dilakukan, item seterusnya yang akan diperiksa akan dilangkau, kerana setiap item berikutnya dalam tatasusunan bergerak ke hadapan dengan satu .

Saya menemui masalah, menukar kod dan melaraskan indeks jujukan (i) selepas melakukan operasi pengalihan keluar.

Salin kod Kod adalah seperti berikut:

//Alih keluar 2
daripada tatasusunan var arr = [1,2,2,2,2,1,1,2,2];
for(var i=0,total=arr.length;i if(arr[i] == 2){
//Memenuhi syarat, keluarkan
arr.splice(i,1);
//Laraskan indeks jujukan
i = i-1;
}
}
console.log(arr);

Masalahnya telah diselesaikan, tetapi saya masih merasakan bahawa mengubah suai indeks jujukan adalah goda bagi gelung for. Kemudian saya mendapat inspirasi, bang bang bang, dan menaip kod berikut:

Salin kod Kod adalah seperti berikut:

//Alih keluar 2
daripada tatasusunan var arr = [1,2,2,2,2,1,1,2,2];
for(var i = arr.length-1;i!=-1;i--){
if(arr[i] == 2){
//Memenuhi syarat, keluarkan
arr.splice(i,1);
}
}
console.log(arr);

Proses traversal kekal tidak berubah, satu-satunya perubahan ialah susunan traversal telah berubah, dan by the way, terdapat kurang satu jumlah pembolehubah.

Baiklah, saya akui bahawa apa yang saya tulis hari ini sangat mengarut, tetapi melalui contoh ini, saya akan mengingatkan anda semasa menulis kod pada masa hadapan, semasa proses traversal, jika ia melibatkan pengubahsuaian tatasusunan itu sendiri (penambahan dan pemadaman), reverse traversal ialah perbandingan Cara yang selamat untuk dilalui.

Mengekodkan nota, biarkan mereka mentertawakan diri sendiri nanti!

Sila nyatakan sumber semasa mencetak semula: http://bh-lay.com/blog/148c07761fa

Kenyataan:
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