Semua metode array pemadam dalam JavaScript. JQuery - Menghancurkan array, objek dan elemen konversi ke array nyata

Belum lama ini butuh saya Javascript Buat array asosiatif. Hebatnya, dia tidak pernah dibutuhkan sebelumnya Javascript.. Saya naik untuk mencari di internet, bagaimana melakukannya. Dan sangat terkejut bahwa sejumlah besar orang menulis bahwa itu tidak mungkin, di Javascript. Bukan itu. Untungnya, pengalaman bertahun-tahun saya menyarankan saya bahwa mereka membawa omong kosong. Karena itu, pada akhirnya, saya belajar cara Membuat Array Asosiatif dalam JavascriptApa dan beri tahu Anda dalam artikel ini.

Kode ditulis di bawah ini di mana array asosiatif dibuatKemudian maka elemen lain ditambahkan dan, akhirnya, array dipindahkan melalui siklus:

Dalam artikel ini kami tinjau menciptakan masif asosiatif., perubahan mereka, serta bangkrut penuh melalui siklus untuk. Secara pribadi saya gunakan array asosiatif dalam javascript Hanya satu hari, tetapi perlu untuk mengetahui tentang kemungkinan seperti itu.

  • I. Otak mesin saat ini
    1. Metode foreach dan metode terkait
    2. Siklus untuk
    3. Penggunaan siklus untuk ... di
    4. Siklus untuk ... dari (penggunaan Iterator implisit)
    5. Penggunaan Iterator Eksplisit
    1. Menggunakan metode untuk memadamkan array nyata
    2. Transformasi menjadi array nyata
    3. Catatan tentang objek

I. Otak mesin saat ini

Saat ini ada tiga cara menghilangkan elemen array nyata:
  1. array.prototype.foreach metode;
  2. siklus klasik untuk;
  3. "Benar" membangun siklus untuk ... di.
Selain itu, segera, dengan munculnya standar ECMAScript 6 baru (ES 6), dua cara lagi diharapkan:
  1. siklus untuk ... dari (penggunaan Iterator implisit);
  2. penggunaan eksplisit dari iterator.

1. Metode foreach dan metode terkait

Jika proyek Anda dirancang untuk mendukung standar ECMAScript 5 (ES5), Anda dapat menggunakan salah satu metode inovasinya - foreach.

Contoh penggunaan:
var A \u003d ["A", "B", "C"]; a.Foreach (konsol.log (entri);));
Secara umum, penggunaan foreach memerlukan perpustakaan emulasi ES5-shim untuk browser yang tidak memiliki dukungan asli untuk metode ini. Ini termasuk IE 8 dan versi sebelumnya yang masih digunakan di beberapa tempat.

Keuntungan dari foreach milik bahwa hal itu tidak perlu mendeklarasikan variabel lokal untuk menyimpan indeks dan nilai elemen saat dari array, karena mereka secara otomatis dikirimkan ke fungsi callback (kolom) sebagai argumen.

Jika Anda khawatir tentang kemungkinan biaya panggilan Columus untuk setiap elemen, jangan khawatir dan membacanya.

Foreach dirancang untuk menikmati semua elemen array, tetapi selain itu, ES5 menawarkan beberapa metode yang lebih berguna untuk patung semua atau elemen tertentu ditambah pertunjukan dengan mereka:

  • setiap - mengembalikan true jika untuk setiap elemen array columus mengembalikan nilai yang diberikan kepada benar.
  • beberapa - mengembalikan BENAR, jika setidaknya untuk satu elemen array columus mengembalikan nilai yang diberikan kepada true.
  • filter - Membuat array baru, termasuk elemen-elemen dari array sumber yang mana kolom mengembalikan true.
  • peta - Membuat array baru yang terdiri dari nilai-nilai kolom cabul.
  • kurangi - Mengurangi array ke nilai tunggal dengan menerapkan colum secara bergantian ke setiap elemen array, mulai dari yang pertama (dapat berguna untuk menghitung jumlah elemen array dan fungsi hasil lainnya).
  • reducight - Bekerja sama untuk mengurangi, tetapi memindahkan item dalam urutan terbalik.

2. Siklus untuk

Bagus untuk kemudi:

Var A \u003d ["A", "B", "C"]; Indeks var; Untuk (indeks \u003d 0; indeks< a.length; ++index) { console.log(a); }
Jika panjang array tidak berubah selama seluruh siklus, dan siklus itu sendiri milik produktivitas kode (yang tidak mungkin), maka Anda dapat menggunakan versi "lebih optimal" untuk penyimpanan panjang array:

Var A \u003d ["A", "B", "C"]; Var index, len; untuk (indeks \u003d 0, len \u003d a.length; indeks< len; ++index) { console.log(a); }
Secara teoritis, kode ini harus dilakukan sedikit lebih cepat dari yang sebelumnya.

Jika prosedur untuk bore dari unsur-unsur yang tidak penting, maka Anda dapat pergi lebih jauh dalam hal optimasi dan menyingkirkan variabel untuk menyimpan panjang array dengan mengubah prosedur untuk sebaliknya:

Var A \u003d ["A", "B", "C"]; Indeks var; untuk (indeks \u003d a.length - 1; index\u003e \u003d 0; --index) (konsol.log (a);)
Namun, dalam mesin JavaScript modern, permainan seperti itu dengan optimasi biasanya tidak berarti apa-apa.

3. Penggunaan siklus yang tepat untuk ... di

Jika Anda menyarankan Anda untuk menggunakan ... dalam siklus, ingatlah bahwa enumerasi array bukan untuk apa yang dimaksudkan. Bertentangan dengan siklus kesalahpahaman umum untuk ... di dalamnya bukan indeks array, tetapi sifat-sifat objek yang tercantum.

Namun demikian, dalam beberapa kasus, seperti busting array jarang, untuk ... pada mungkin berguna jika hanya tindakan pencegahan yang diikuti seperti yang ditunjukkan pada contoh di bawah ini:

// A - Raised array var a \u003d; A \u003d "A"; A \u003d "B"; A \u003d "c"; Untuk (kunci var dalam a) (jika (a.hasownproperty (kunci) && / \u003d $$ | ^ md * $ /. Tes (kunci) && kunci<= 4294967294) { console.log(a); } }
Dalam contoh ini, dua cek dilakukan pada setiap iterasi siklus:

  1. fakta bahwa array memiliki properti sendiri dengan nama nama (tidak diwarisi dari prototipe).
  2. fakta bahwa kunci adalah string yang berisi catatan desimal integer yang nilainya kurang dari 4294967294. Dari mana asal nomor terakhir? Dari definisi indeks array di ES5, dari mana ia mengikuti bahwa indeks terbesar yang dapat memiliki elemen dalam array: (2 ^ 32 - 2) \u003d 4294967294.
Tentu saja, pemeriksaan seperti itu akan membutuhkan waktu ekstra ketika siklus dijalankan. Tetapi dalam kasus array yang jarang terjadi, metode ini lebih efisien daripada untuk siklus, karena dalam hal ini hanya elemen-elemen yang didefinisikan dengan jelas dalam array. Jadi, dalam contoh di atas, hanya 3 iterasi yang akan dilakukan (untuk indeks 0, 10 dan 10.000) - terhadap 10001 dalam siklus.

Agar tidak menulis kode pemeriksaan besar seperti itu setiap kali massif diperlukan, adalah mungkin untuk mengaturnya sebagai fungsi terpisah:

Fungsi arrayhasownindex (array, kunci) (return array.hasownproperty (kunci) && / \u003d ketik $ | ^ md * $ /. Uji (kunci) &&<= 4294967294; }
Kemudian tubuh siklus dari contoh akan secara signifikan berkurang:

Untuk (jika (arraysownindex (a, kunci)) (konsol.log (a);)))
Kode audit yang dibahas di atas adalah universal yang cocok untuk semua kasus. Tetapi sebaliknya Anda dapat menggunakan versi yang lebih pendek, meskipun secara formal dan tidak cukup benar, tetapi, bagaimanapun, cocok untuk sebagian besar kasus:

Untuk (i.hasownproperty (kunci) && string (parseint (kunci, 10)) \u003d\u003d\u003d kunci) (konsol.log (a))))

4. Siklus untuk ... dari (Penggunaan Iterator Tersirat)

ES6, sementara masih dalam status draft, harus memasukkan iterator dalam javascript.

Iterator. - Ini adalah protokol yang diterapkan oleh objek yang menentukan metode standar untuk mendapatkan urutan nilai (terbatas atau tak terbatas).
Iterator adalah objek di mana metode berikutnya () didefinisikan - fungsi tanpa argumen yang mengembalikan objek dengan dua properti:

  1. selesai (Boolean) - dibutuhkan benar jika iterator mencapai akhir urutan yang dihasilkan. Jika tidak, memiliki nilai palsu.
  2. nilai - menentukan nilai yang dikembalikan oleh iterator. Ini mungkin tidak didefinisikan (tidak ada) jika properti yang dilakukan itu benar.
Banyak benda bawaan, termasuk. Array ini, memiliki iterator default. Cara paling sederhana untuk menggunakan iterator dalam array nyata adalah dengan menggunakan yang baru untuk ... dari.

Contoh penggunaan untuk ... dari:

Var val; var A \u003d ["A", "B", "C"]; Untuk (val a) (konsol.log (val);)
Dalam contoh di atas, untuk ... secara implisit menyebutnya objek array iterator untuk mendapatkan setiap nilai array.

5. Penggunaan Iterator secara eksplisit

Iterator juga dapat digunakan dan secara eksplisit, bagaimanapun, dalam hal ini kode menjadi jauh lebih rumit, dibandingkan dengan untuk ... dari siklus. Sepertinya ini:

Var A \u003d ["A", "B", "C"]; var it \u003d a.entries (); Entri var; Sementara (! (Entry \u003d it.next ()). Selesai) (konsol.log (entry.value);)
Dalam contoh ini, array.prototype.entries mengembalikan iterator yang digunakan untuk menampilkan nilai array. Setiap entri iterasi. Value berisi array formulir [Kunci, Nilai].

Ii. Patung benda seperti masif

Selain array nyata, Javascript juga ditemukan benda-benda seperti masif . Dengan array nyata, kerabat mereka terkait dengan fakta bahwa mereka memiliki properti panjang dan sifat dengan nama dalam bentuk angka yang sesuai dengan elemen array. Anda dapat menghubungi koleksi Nodelis Dom dan argumen pseudomassif yang tersedia di dalam fungsi / metode apa pun.

1. Menggunakan cara memadamkan array nyata

Setidaknya sebagian besar, jika tidak semua, metode pemadaman array nyata dapat diterapkan untuk menghitung benda-benda seperti besar.

Desain untuk dan untuk ... di dapat diterapkan untuk secara masif seperti objek dengan cara yang persis sama dengan array nyata.

Foreach dan array lain.prototipe Metode juga berlaku untuk benda besar. Untuk melakukan ini, gunakan file. Call atau Function. Terapkan panggilan.

Misalnya, jika Anda ingin menerapkan foreach ke properti node objek childnodes, maka ini dilakukan seperti ini:

Array.prototype.foreach.call (node.childnodes, fungsi (anak) (// buat apa pun dengan objek anak));
Untuk kemudahan penggunaan kembali penerimaan ini, Anda dapat mendeklarasikan tautan ke array.prototype.Foreach metode dalam variabel terpisah dan menggunakannya sebagai pengurangan:

// (diasumsikan bahwa semua kode di bawah ini dalam satu bidang visibilitas) var foreach \u003d array.prototype.foreach; // ... foreach.call (node.childnodes, fungsi (anak) (// buat sesuatu dengan objek anak));
Jika objek seperti array adalah iterator, itu dapat digunakan secara eksplisit atau implisit untuk integritas objek dengan cara yang sama seperti untuk array nyata.

2. Konversi ke array ini

Ada juga yang lain, sangat sederhana, cara untuk menghitung objek seperti lengan: mengubahnya menjadi array nyata dan menggunakan salah satu metode array yang ada yang dibahas di atas. Untuk konversi, Anda dapat menggunakan metode universal array.prototype.slice, yang dapat diterapkan ke objek besar. Ini dilakukan dengan sangat sederhana seperti yang ditunjukkan pada contoh di bawah ini:

Var trueArray \u003d array.protype.slice.call (arraylikecject, 0);
Misalnya, jika Anda ingin mengonversi koleksi nodel ke array nyata, Anda perlu kode seperti itu:

Var divs \u003d array.prototype.slice.call (document.queryselectoread ("div"), 0);
Memperbarui.: Seperti dicatat dalam komentar rock and torbasow, di ES6 bukan array.prototype.slice, Anda dapat menggunakan metode array yang lebih visual.

3. Catatan tentang objek lingkungan eksekusi

Jika Anda menerapkan metode ARRAY.PROTOTYPE ke objek dari lingkungan eksekusi (seperti pengumpulan DOM), maka Anda harus diingat bahwa operasi yang benar dari metode ini tidak dijamin di semua lingkungan eksekusi (termasuk di browser). Itu tergantung pada perilaku objek tertentu dalam lingkungan olahraga tertentu, jika lebih tepatnya, dari cara operasi hasproperty abstrak diimplementasikan dalam objek ini. Masalahnya adalah bahwa standar ES5 itu sendiri memungkinkan kemungkinan perilaku objek yang salah sehubungan dengan operasi ini (lihat §8.6.2).

Oleh karena itu, penting untuk menguji pekerjaan array.prototipe metode di setiap lingkungan eksekusi (browser), di mana Anda berencana untuk menggunakan aplikasi Anda.

Mereka untuk setiap () Metode mengeksekusi fungsi yang disediakan satu kali untuk setiap elemen array.

Sumber untuk contoh interaktif ini disimpan dalam repositori GitHub. Jika Anda "d Seperti yang Berkontribusi kepada Contoh Interaktif Project, silahkan Clone https://github.com/mdn/Interactive-examples dan Kirim US A Pull Permintaan.

Sintaksis

Arr.foreach (panggilan balik (CurrentValue [, indeks [, array]]) [, thisarg])

Parameter.

Fungsi panggilan balik untuk dieksekusi pada setiap elemen. Ini menerima antara satu dan tiga argumen: CurrentValue elemen saat ini sedang diproses dalam array. Indeks opsional value indeks dalam array. Array opsional array foreach () dipanggil. Nilai opsional ini untuk digunakan saat ini saat mengeksekusi panggilan balik.

Nilai kembali.

Deskripsi.

foreach () memanggil fungsi panggilan balik yang disediakan satu kali untuk setiap elemen dalam array dalam urutan menaik. Ini tidak dipanggil untuk properti indeks yang telah dihapus atau tidak diinisialisasi. Untuk array jarang,)

panggilan balik dipanggil dengan tiga argumen:

  1. nilai elemen
  2. indeks elemen
  3. objek array melintasi

Jika parameter thisarg disediakan untuk foreach (), itu akan digunakan sebagai nilai panggilan balik ini. Nilai terpana yang dapat diamati dengan panggilan balik ditentukan sesuai dengan aturan yang dilihat oleh fungsi ini.

Kisaran elemen yang diproses oleh forach () diatur sebelum doa pertama panggilan balik. Elemen yang ditambahkan ke array setelah panggilan ke Foreach () dimulai tidak akan dikunjungi dengan panggilan balik. Jika elemen array yang ada diubah atau dihapus, nilainya seperti yang diteruskan ke panggilan balik akan menjadi nilai pada waktu FORACH () mengunjungi mereka; Elemen yang dihapus sebelum dikunjungi tidak dikunjungi. Jika elemen yang sudah dikunjungi dihapus (mis. Menggunakan Shift ()) selama iterasi, elemen selanjutnya akan dilewati. (Lihat contoh ini, di bawah ini.)

foreach () mengeksekusi fungsi panggilan balik sekali untuk setiap elemen array; Tidak seperti Peta () atau kurangi () Selalu mengembalikan nilai yang tidak ditentukan dan tidak rantai. Kasus penggunaan khas adalah untuk mengeksekusi efek samping di ujung rantai.

foreach () tidak bermutasi array di mana itu disebut. (Namun, panggilan balik dapat melakukannya)

Tidak ada cara untuk menghentikan atau mematahkan loop foreach () selain selema dengan melempar pengecualian. Jika Anda memerlukan perilaku seperti itu, metode foreach () adalah alat yang salah.

Pengakhiran dini dapat dilakukan dengan:

Metode array: Setiap (), beberapa (), temukan (), dan findIndex () Uji elemen array dengan predikat mengembalikan nilai yang tepat untuk menentukan apakah iterasi lebih lanjut diperlukan.

Contoh.

Tidak ada operasi untuk nilai-nilai yang belum diinisialisasi (array jarang)

Constparse \u003d biarkan numcallbackruns \u003d 0 arraysparase.foreach (elemen (elemen) (elemen)) konsol.log ("numcallbackruns:", numcallbackruns) //// 7 // numcallbackruns: 3 // komentar : Karena Anda dapat melihat nilai yang hilang antara 3 dan 7 tidak menjalankan fungsi panggilan balik.

Mengkonversi a untuk loop ke foreach

const item \u003d ["item1", "item2", "item3"] const copy \u003d // sebelum untuk (biarkan i \u003d 0; i< items.length; i++) { copy.push(items[i]) } // after items.forEach(function(item){ copy.push(item) })

Mencetak isi array

catatan: Untuk menampilkan konten array di konsol, Anda dapat menggunakan konsol.table (), yang mencetak versi array yang diformat.

Contoh berikut menggambarkan pendekatan alternatif, menggunakan foreach ().

Kode berikut ini mencatat garis untuk setiap elemen dalam array:

Fungsi logarrayelements (elemen, indeks, array) (konsol.log ("a [" + index + "] \u003d" elemen +) // perhatikan bahwa indeks 2 dilewati, karena tidak ada item di // posisi itu di // Array ....Foreach (logarrayelements) // log: // A \u003d 2 // A \u003d 5 // A \u003d 9

Menggunakan thisarg.

Contoh berikut (contred) memperbarui properti objek dari setiap entri dalam array:

Fungsi counter () (ini.sum \u003d 0) counter.prototype.add \u003d fungsi (array) (array.fourneach (fungsi (entri), ini ) // ^ ---- Catatan) Const OBJ \u003d NEW counter () obj.add () obj.count // 3 obj.sum // 16

Karena parameter ini (ini) disediakan untuk foreach (), ia diteruskan ke panggilan balik setiap kali itu dipanggil. Panggilan balik menggunakannya sebagai nilai ini.

Fungsi Salin Objek

Kode berikut membuat salinan objek yang diberikan.

Ada berbagai cara untuk membuat salinan objek. Berikut ini hanyalah satu cara dan hadir untuk menjelaskan bagaimana array.prototype.foreach () bekerja dengan menggunakan objek ECMAScript 5. * Fungsi properti Meta.

Fungsi Copy (OBJ) (object.getprototypeof (OBJ)) const Propnames \u003d Object.getownPropertyNames (OBJ) Propnames.Foreach (conf \u003d object.getownPropertyDescriptor (OBJ, NAMA) Obyek .defineProperty (Copy, Nama, Info))) Kembali Copy ) Const OBJ1 \u003d (A: 1, B: 2) Const OBJ2 \u003d Salin (obj1) // obj2 terlihat seperti OBJ1 sekarang

Jika array dimodifikasi selama iterasi, elemen lain mungkin dilewati.

Contoh berikut log "satu", "dua", "empat".

Ketika entri berisi nilai "(! Lang: Dua" is reached, the first entry of the whole array is shifted off-resulting in all remaining entries moving up one position. Because element "four" is now at an earlier position in the array, "three" will be skipped.!}

foreach () tidak membuat salinan array sebelum iteating.

Mari Kata \u003d [ "Satu", "Dua", "Tiga", "Empat"] Words.Foreach (FUNGSI (Word) jika (Word \u003d\u003d\u003d "Dua") (Words.shift ()))) // satu // dua empat

Ratakan array.

Contoh berikut ini hanya di sini untuk tujuan belajar. Jika Anda Ingin Ratakan Sebuah Array menggunakan Built-in Metode Anda Can Gunakan Array.prototype.flat () (Yang Diharapkan Jadilah Bagian dari Es2019, dan Is Alady Diimplementasikan di Beberapa Browser).

** * merata Lulus Array dalam Satu Array Dimensi * * @Params (Array) ARR * @Returns (Array) * / Fungsi Ratakan (Arr) (Const Hasil \u003d Arr.Foreach ((i) \u003d\u003e (Jika (Array. IsArray (I)) (result.push (... Ratakan (i))) ELSE (result.push (i))) RETURN HASIL) // penggunaan masalah const \u003d, 8, 9]] Ratakan (Soal) / /

Catatan tentang Menggunakan Janji atau Fungsi Async

Biarkan peringkat \u003d biarkan Sum \u003d 0 Biarkan SumFungsi \u003d fungsi async (A, b) (mengembalikan A + b) peringkat.Forefneach (fungsi async (jumlah \u003d menunggu SumFungsi))) konsol.log (jumlah) // output yang diharapkan: 14 // output aktual: 0

Spesifikasi.

Spesifikasi Status. Komentar
Draf terbaru ECMAScript (ECMA-262)
MINUMAN.
ECMAScript 2015 (edisi ke-6, ECMA-262)
Definisi "array.prototipe.foreach" dalam spesifikasi itu.
Standar.
ECMASCRUCT 5.1 (ECMA-262)
Definisi "array.prototipe.foreach" dalam spesifikasi itu.
Standar. Definisi awal. Diimplementasikan dalam JavaScript 1.6.

Kompatibilitas browser

Tabel kompatibilitas di halaman ini dihasilkan dari data terstruktur. Jika Anda ingin berkontribusi pada data, silakan periksa https://github.com/mdn/browser-compat-data dan kirimkan permintaan tarik kami.

Perbarui data kompatibilitas pada GitHub

Desktop.Mobile.Server.
Chrome.Tepi.Firefox.Internet Explorer.Opera.Safari.Android WebView.Chrome untuk Android.Firefox untuk AndroidOpera untuk Android.Safari di iOS.Samsung Internet.Node.js.
Untuk setiap.Dukungan penuh Chrome 1Dukungan penuh tepi 12Dukungan penuh Firefox 1.5IE dukungan penuh 9Opera Dukungan Penuh YaSafari dukungan penuh 3WebView Android dukungan penuh ≤37Dukungan penuh Chrome Android 18Dukungan penuh android firefox 4Opera android dukungan penuh yaSafari iOS Dukungan Penuh 1Samsung Internet Android Dukungan penuh 1.0nodejs dukungan penuh ya

Sebuah artikel di mana kami mempertimbangkan dengan contoh-contoh untuk menggunakan fungsi dan metode jQuery setiap perpustakaan.

Di perpustakaan jQuery ada 2 entitas berbeda dengan nama masing-masing.

Yang pertama (jQuery.Ensip) adalah fungsi jQuery universal yang dengannya Anda dapat membuat kekuatan brute dari array atau elemen objek.

Yang kedua (masing-masing) adalah metode yang berlaku untuk serangkaian elemen untuk mengatur siklus pada mereka.

Masing-masing (jQuery.imple) siklus. Contoh penggunaan

Fungsi sintaks masing-masing:

// array atau objek - array atau objek, elemen atau properti yang harus disortir // callback - fungsi yang akan dilakukan untuk setiap elemen array atau objek properti $ .each (array atau objek, panggilan balik);

Bekerja dengan setiap fungsi akan melihat contoh.

Contoh nomor 1. Ini akan dilakukan oleh pelaku semua elemen array (array).

// array, terdiri dari 3 baris var arr \u003d ["mobil", "truk", "bus"]; // setelah AR $. Array (arr, fungsi (indeks, nilai) (// tindakan yang akan dilakukan untuk setiap elemen array // indeks - ini adalah indeks saat ini dari elemen array (angka) // Nilai adalah nilai elemen array saat ini // tarik indeks dan nilai array di konsol konsol.log ("indeks:" + indeks + "; nilai:" + nilai);)); / * Hasil (konsol): Indeks: 0; Nilai: Indeks Mobil: 1; MAKNA: Indeks truk: 2; Nilai: Bus * /

Dalam kode di atas, setiap fungsi digunakan untuk menghitung array. Fungsinya memiliki 2 parameter wajib. Parameter pertama adalah esensi (array atau objek), elemen-elemen (properti) yang harus diurutkan. Dalam hal ini, ini adalah array panah. Parameter kedua adalah fungsi panggilan balik yang akan dilakukan untuk setiap elemen (dalam hal ini) array. Ini memiliki 2 parameter yang tersedia di dalamnya dengan variabel yang sesuai. Parameter pertama adalah urutan nomor elemen (hitungan mundur dilakukan dari 0). Parameter kedua adalah nilai dari elemen array saat ini.

Contoh nomor 2. Dalam contoh ini, kita akan ada semua sifat objek.


// objek smartphone memiliki 5 var smartphone \u003d ("nama" Properti: "LG G5 SE", "tahun": "2016", "ukuran layar": "5.3", "resolusi layar": "2560 x 1440" , "OS": "Android 6.0 (marshmallow)"); // setelah Anda dengan objek smartphone $ .each (smartphone, fungsi (kunci, nilai) (// tindakan yang akan dieksekusi untuk setiap objek properti // kunci - nama saat ini dari sifat-sifat array // nilai - the Nilai dari properti objek saat ini // tarik nama properti dan nilainya di konsol konsol.log ("properti:" + tombol + "; nilai:" + nilai);)); / * Hasil (konsol): Properti: Nama; Nilai: LG G5 SE Properti: Tahun; Nilai: 2016 properti: ukuran layar; Nilai: 5.3 Properti: resolusi layar; Nilai: 2560 x 1440 properti: OS; MAKNA: Android 6.0 (marshmallow) * /

Setiap fungsi dapat digunakan untuk benda javascript yang ramai. Perbedaan antara penggunaannya hanya terdiri dari fakta bahwa parameter fungsi panggilan balik memiliki nilai lain. Parameter pertama menyimpan nama properti objek, dan yang kedua adalah nilai dari properti ini.

Contoh nomor 3. Di dalamnya, kita akan ada struktur yang lebih kompleks (pertimbangkan bagaimana menggunakan masing-masing bersarang).

// objek yang terdiri dari 2 properti. Setiap properti dari objek ini memiliki sebuah array sebagai nilai, unsur-unsur yang juga objek ARTIKEL VAR \u003d ( "Bootstrap": [( "ID": "1", "title": "Pendahuluan"), ( "ID" : "2", "Judul": "Cara Set"), ( "id": "3", "title": "Grid")], "javascript": [( "ID": "4", " title ": "Dasar "), (" ID ":" 5"," title ":" sampel elemen ")]); $ .each (console.log ( "bagian:" + Key); $ .each (Data, Fungsi (Index, Nilai) (console.log ( "Artikel: ID \u003d" + Nilai [ID "] +"; nama \u003d "+ nilai [" judul "]);));); / * Hasil: Bagian: Bootstrap Article: ID \u003d 1; Nama \u003d Pendahuluan Artikel: ID \u003d 2; Judul \u003d Cara Memasang Artikel: ID \u003d 3; Nama \u003d Mesh Bagian: Artikel JavaScript: ID \u003d 4; Nama \u003d dasar Artikel: ID \u003d 5; Nama \u003d Elemen Sampling * /

Bagaimana cara menyela (keluar dari siklus)?

Interupsi (istirahat) dari setiap siklus dilakukan dengan menggunakan pernyataan pengembalian, yang harus mengembalikan nilai FALSE.

Misalnya, kami menginterupsi eksekusi setiap siklus setelah menemukan nomor 7 di array:

// array yang terdiri dari 5 angka var arr \u003d; // nomor yang ingin Anda temukan var find \u003d 7; // Setelah AR $ .isteach array (arr, fungsi (indeks, nilai) (// Jika angka yang diperlukan ditemukan, maka .. Jika (nilai \u003d\u003d\u003d temukan) (// Hapus ke konsol konsol. Log ( "Hore jumlah! '+ Cari +: + index' Ditemukan jumlah ini memiliki indeks!"); // mengganggu siklus RETURN FALSE;) ELSE (// jika tidak, untuk menampilkan saat ini jumlah console.log ke konsol ( "jumlah sekarang:" + Nilai);))); / * Hasil (dalam konsol): Nomor Saat Ini: 5 Nomor Saat Ini: 4 Hore! Nomor 7 ditemukan! Nomor ini memiliki indeks: 2 * /

Bagaimana cara pergi ke iterasi berikutnya (masing-masing melanjutkan)?

Di masing-masing, gangguan iterasi saat ini dan transisi ke yang berikutnya dilakukan dengan menggunakan pernyataan pengembalian, yang harus memiliki nilai berbeda dari false.

// array yang terdiri dari var arr \u003d angka; // array yang harus berisi semua elemen array arrak, kecuali untuk nilai var yesuarr \u003d; // setelah arrow arrow arr.ach (arr, fungsi (indeks, nilai) (// Jika diukur, maka Anda akan melewatkannya jika (nilai% 2 \u003d\u003d\u003d 0) (// Perve lebih dari arus Iterate dan mache ke pengembalian berikutnya;) // Tambahkan ke array newarr value newarr.push (Nilai);)); Konsol.log ("array sumber (arr):" + arr.join ()); Konsol.log ("array hasil (NewAr):" + Newarr.Join ()); / * Hasil (dalam konsol): Sumber array (arr): 3,5,4,9,17,19,30,35,40 array hasil (NewAr): 3,5,9,17,19,35 * /

Payudara elemen saat ini (.each)

Setiap sintaks metode (dipilih hanya untuk item yang dipilih):


.each (fungsi); // Fungsi - fungsi yang akan dilakukan untuk setiap item objek saat ini

Kami akan menganalisis bagaimana metode ini bekerja pada contoh berikut (dengan menumbuhkan elemen div):


Dalam contoh di atas, setiap metode menggunakan set arus (elemen yang dipilih oleh $ Selector ("Div"). Sebagai masing-masing metode handler, suatu fungsi selalu dilakukan, yang akan dilakukan untuk setiap elemen panggilan saat ini (dalam hal ini untuk setiap elemen div). Fungsi ini memiliki 2 parameter opsional. Salah satunya (indeks) adalah nomor urutan iterasi saat ini, dan referensi kedua (elemen) - DOM ke elemen saat ini. Selain itu, di dalam fungsi, kata kunci ini tersedia, yang serta parameter kedua berisi tautan DOM ke elemen saat ini.

Misalnya, tarik atribut href untuk semua item dan pada halaman ke konsol.

$ ("A"). Setiap (fungsi () (konsol.log ($ (ini) .attr ("href"));));

$ ("A"). Masing-masing (fungsi () (var link \u003d $ (ini) .attr ("href"); if ((link.indexof ("http: //") \u003d\u003d 0) ||indexof ("https: //") \u003d\u003d 0)) (konsol.log ("referensi href \u003d" + tautan);)); // Jika tautan berikut terletak di halaman: // yandex // Bagaimana javascript bekerja? // bootstrap // kemudian di konsol kita akan melihat hasil berikut: // https://www.yandex.ru/ // http://getboottrap.com/

Misalnya, pertimbangkan bagaimana mengatur setiap siklus pada elemen DOM yang memiliki nama nama (dengan memindahkan semua elemen dari kelas yang sama).

Raspberry Pi.
komputasi satu-papan
Intel Galileo Gen2.
19$
Pine A64 Plus.

Misalnya, kami akan menganalisis cara membahas semua item pada halaman.

Misalnya, tarik nilai semua elemen input pada halaman.

$ ("Input"). Setiap (konsol.log ($ (ini) .val ());));

Misalnya, dengan memindahkan semua elemen anak yang berlokasi di UL dengan id \u003d "MyList" (setiap anak).

  • Html.
  • Javascript.

Pertimbangkan metode yang dapat Anda definisikan indeks terakhir (elemen) dalam jQuery setiap metode.

// pilih elemen var mylist \u003d $ ("ul li"); // tentukan jumlah elemen dalam total sampel var \u003d MyList.length; // Kami melaksanakan elemen MyList yang dipilih. Setiap elemen (fungsi (indeks) (jika (indeks \u003d\u003d\u003d total - 1) (// Ini adalah elemen terakhir dalam sampel)));

Terakhir Diperbarui: 03/26/2018

Objek array mewakili array dan menyediakan sejumlah properti dan metode yang dapat kami kendalikan array.

Inisialisasi array

Anda dapat membuat array kosong menggunakan braket persegi atau desainer array:

Pengguna var \u003d array baru (); Var people \u003d; Konsol.log (pengguna); // array console.log (orang); // Himpunan.

Anda dapat segera menginisialisasi array dengan sejumlah item:

Pengguna var \u003d array baru ("Tom", "Bill", "Alice"); var orang \u003d ["Sam", "John", "Kate"]; Konsol.log (pengguna); // ["Tom", "Bill", "Alice"] Console.Log (People); // ["Sam", "John", "Kate"]

Anda dapat mendefinisikan array dan dalam proses mengidentifikasi elemen-elemen baru ke dalamnya:

Pengguna var \u003d array baru (); Pengguna \u003d "Tom"; Pengguna \u003d "Kate"; Konsol.log (pengguna); // "tom" console.log (pengguna); // tidak terdefinisi.

Tidak masalah bahwa secara default array dibuat dengan nol panjang. Dengan bantuan indeks, kami dapat mengganti indeks tertentu dalam suatu array satu atau elemen lain.

panjangnya.

Untuk mengetahui panjang array, panjangnya properti digunakan:

Var fruit \u003d array baru (); Buah \u003d "apel"; Buah \u003d "pir"; Buah \u003d "prem"; DOCUMEN.WRITE ("Dalam buah array" + buah.kadam + "elemen:
"); untuk (var i \u003d 0; i< fruit.length; i++) document.write(fruit[i] + "
");

Pada kenyataan array lama, indeks elemen terakhir dengan penambahan unit akan. Sebagai contoh:

Pengguna var \u003d array baru (); // dalam array 0 elemen pengguna \u003d "Tom"; Pengguna \u003d "Kate"; Pengguna \u003d "Sam"; untuk (var i \u003d 0; i

Output browser:

Tom Kate undefined undefined sam

Terlepas dari kenyataan bahwa untuk indeks 2 dan 3, kami tidak menambahkan elemen, tetapi panjang array dalam hal ini akan menjadi nomor 5. Hanya elemen dengan indeks 2 dan 3 akan tidak ditentukan.

Menyalin array. Irisan ()

Menyalin array dapat dangkal atau dangkal (salinan dangkal) dan salinan dalam.

Dengan penyalinan dangkal, cukup untuk menetapkan nilai variabel ke variabel lain yang menyimpan array:

Pengguna var \u003d ["Tom", "Sam", "Bill"]; Konsol.log (pengguna); // [Tom "," Sam "," Bill "] var orang \u003d pengguna; // orang penyalinan dangkal \u003d "Mike"; // Ubah elemen konsol. Log (pengguna); // ["Tom", "Mike", "Bill"]

Dalam hal ini, variabel orang setelah menyalin akan menunjuk ke array yang sama dengan variabel pengguna. Oleh karena itu, ketika mengubah elemen pada orang, barang akan berubah pada pengguna, karena sebenarnya ini adalah array yang sama.

Perilaku seperti itu tidak selalu diinginkan. Misalnya, kami inginkan, setelah menyalin variabel menunjukkan array terpisah. Dan dalam hal ini, Anda dapat menggunakan salin dalam menggunakan metode slice ():

Pengguna var \u003d ["Tom", "Sam", "Bill"]; Konsol.log (pengguna); // [Tom "," Sam "," Bill "] var people \u003d users.slice (); // yang mendalam menyalin orang \u003d "Mike"; // Ubah elemen konsol. Log (pengguna); // ["Tom", "Sam", "Bill"] konsol.log (orang); // ["Tom", "Mike", "Bill"]

Dalam hal ini, setelah menyalin, variabel akan menunjukkan array yang berbeda, dan kita dapat mengubahnya secara terpisah satu sama lain.

Juga, metode slice () memungkinkan Anda untuk menyalin bagian dari array:

Pengguna var \u003d ["Tom", "Sam", "Bill", "Alice", "Kate"]; var people \u003d users.slice (1, 4); Konsol.log (orang); // ["Sam", "Bill", "Alice"]

Metode slice () ditransmisikan indeks awal dan akhir, yang digunakan untuk memilih nilai dari array. Artinya, dalam hal ini, sampel dalam array baru mulai dari 1 indeks ke indeks 4 tidak termasuk. Dan karena indeksasi array dimulai dengan awal, maka elemen ketiga, ketiga dan keempat akan berada di array baru.

dorong ()

Metode push () menambahkan elemen ke ujung array:

Var fruit \u003d; Buah.push ("apel"); Buah.push ("pir"); Buah.push ("prem"); Buah.push ("ceri", "aprikot
"); Document.Write (buah); // apel, pir, prem, ceri, aprikot

pop ()

Metode POP () menghapus elemen terakhir dari array:

Var buah \u003d ["apel", "pir", "prem"]; var bellek \u003d buah.pop (); // Hapus elemen dokumen terbaru.Write dari array (belastfuit +
"); DOCUMEN.WRITE (" dalam Buah Array "+ Buah.Lengur +" Elemen:
"); untuk (var i \u003d 0; i ");

Output browser:

Plum dalam Buah Array 2 Elemen: Pear Apples

shift ()

Metode Shift () menghapus dan menghapus elemen pertama dari array:

Var buah \u003d ["apel", "pir", "prem"]; var firstfuit \u003d fruit.shift (); Document.Write (FirstFuit +
"); DOCUMEN.WRITE (" dalam Buah Array "+ Buah.Lengur +" Elemen:
"); untuk (var i \u003d 0; i ");

Output browser:

Apel dalam Buah Array 2 Elemen: Pir Plum

unshift ()

Metode Unshift () menambahkan elemen baru ke awal array:

Var buah \u003d ["apel", "pir", "prem"]; Buah.unshift ("aprikot"); Dokumen.write (buah);

Output browser:

Aprikot, apel, pir, prem

Menghapus elemen dengan indeks. Sambatan ()

Metode Splice () menghapus item dari indeks tertentu. Misalnya, menghapus item dari indeks ketiga:

Pengguna var \u003d ["Tom", "Sam", "Bill", "Alice", "Kate"]; var dihapus \u003d pengguna.spice (3); Konsol.log (dihapus); // ["alice", "kate"] konsol.log (pengguna); // ["Tom", "Sam", "Bill"]

Metode irisan mengembalikan item jarak jauh.

Dalam hal ini, penghapusan berasal dari awal array. Jika Anda mentransfer indeks negatif, penghapusan akan dibuat dari akhir array. Misalnya, hapus elemen terakhir:

Pengguna var \u003d ["Tom", "Sam", "Bill", "Alice", "Kate"]; var dihapus \u003d pengguna.spice (-1); Konsol.log (dihapus); // ["kate"] konsol.log (pengguna); // ["Tom", "Sam", "Bill", "Alice"]

Versi tambahan dari metode ini memungkinkan Anda untuk mengatur indeks akhir untuk dihapus. Misalnya, hapus dari indeks pertama ke ketiga:

Pengguna var \u003d ["Tom", "Sam", "Bill", "Alice", "Kate"]; var dihapus \u003d pengguna.splice (1,3); Konsol.log (dihapus); // ["Sam", "Bill", "Alice"] Console.log (pengguna); // ["Tom", "Kate"]

Versi lain dari metode sambungan memungkinkan Anda untuk memasukkan elemen baru alih-alih item yang dihapus:

Pengguna var \u003d ["Tom", "Sam", "Bill", "Alice", "Kate"]; var dihapus \u003d pengguna.splice (1.3, "Ann", "Bob"); Konsol.log (dihapus); // ["Sam", "Bill", "Alice"] Console.log (pengguna); // ["Tom", "Ann", "Bob", "Kate"]

Dalam hal ini, kami menghapus tiga elemen dari indeks ke-3 hingga 3 dan memasukkan dua elemen sebagai gantinya.

concat ()

Metode concat () digunakan untuk menggabungkan array:

Var buah \u003d ["apel", "pir", "prem"]; var sayuran \u003d ["tomat", "mentimun", "kentang"]; varoducts \u003d fruit.concat (sayuran); untuk (var i \u003d 0; i< products.length; i++) document.write(products[i] + "
");

Pada saat yang sama, tidak perlu menggabungkan hanya jenis array yang sama. Anda bisa dan kotor:

Var buah \u003d ["apel", "pir", "prem"]; harga var \u003d; varoducts \u003d fruit.concat (harga);

ikuti ()

Metode GABUNG () menggabungkan semua elemen array dalam satu baris:

Var buah \u003d ["apel", "pir", "prem", "aprikot", "buah persik"]; var fruitstring \u003d buah.join (","); Document.Write (Fruitstring);

Metode GABUNG () mentransmisikan pemisah antara elemen array. Dalam hal ini, koma akan digunakan sebagai pemisah dan ruang (",").

sortir ()

Metode Sortir () Mengurutkan array naik:

Var buah \u003d ["apel", "pir", "prem", "aprikot", "buah persik"]; buah.sort (); untuk (var i \u003d 0; i< fruit.length; i++) document.write(fruit[i] + "
");

Kesimpulan Di Browser:

Apel aprikot Persia

bALIK ()

Metode terbalik () Menghidupkan kembali tantangan array:

Var buah \u003d ["apel", "pir", "prem", "aprikot", "buah persik"]; Fruit.Reverse (); untuk (var i \u003d 0; i< fruit.length; i++) document.write(fruit[i] + "
");

Kesimpulan Di Browser:

Pir pir pir apel pir

Dalam kombinasi dengan metode Sorts (), Anda dapat mengurutkan array turun:

Var buah \u003d ["apel", "pir", "prem", "aprikot", "buah persik"]; buah.sort (). Terbalik (); untuk (var i \u003d 0; i< fruit.length; i++) document.write(fruit[i] + "
");

Kesimpulan Di Browser:

Apel orang persis pir aprikot

Search Index Element.

Metode indeksof () dan lastindexof () mengembalikan indeks dimasukkannya elemen pertama dan terakhir dalam array. Sebagai contoh:

Var buah \u003d ["apel", "pir", "prem", "apel", "pir"]; var firstindex \u003d fruit.indexof ("apel"); var lastindex \u003d fruit.Lastindexof ("apel"); var otherindex \u003d fruit.indexof ("ceri"); Dokumen.write (firstindex); // 0 Document.Write (LastIndex); // 3 Document.Write (OtherIndex); // -satu

firstIndex memiliki nilai 0, sejak dimasukkannya pertama dari "apel" dalam array jatuh pada indeks 0, dan yang terakhir ke indeks 3.

Jika elemennya tidak ada dalam array, maka dalam hal ini metode indexof () dan lastindexof () dikembalikan ke -1.

setiap ()

Metode setiap () memeriksa apakah semua elemen sesuai dengan kondisi tertentu:

Nomor var \u003d [1, -12, 8, -4, 25, 42]; Kondisi fungsi (result var \u003d false; if (nilai\u003e 0) (hasil \u003d true;) hasil pengembalian;); var lulus \u003d angka. Setiap (kondisi); Document.Write (lulus); // Salah

Dalam metode setiap (), fungsi yang mewakili kondisi ditransmisikan sebagai parameter. Fitur ini membutuhkan tiga parameter:

Kondisi fungsi (nilai, indeks, array) ()

Parameter nilai mewakili elemen array yang dapat disortir saat ini, parameter indeks mewakili indeks item ini, dan parameter array mentransmisikan tautan ke array.

Dalam fitur ini, kita dapat memeriksa nilai yang ditransmisikan dari elemen untuk kepatuhan dengan beberapa kondisi. Misalnya, dalam contoh ini, kami memeriksa setiap elemen array, apakah itu lebih nol. Jika lebih, lalu kembalikan nilai benar, yaitu, elemen cocok dengan kondisi tersebut. Jika kurang, maka kembalikan FALSE - elemen tidak cocok dengan kondisinya.

Akibatnya, ketika angka. Setiap metode disebut (kondisi), ia melewati semua elemen array angka dan mentransfernya ke fungsi kondisi. Jika fungsi ini menghasilkan benar ke semua item, maka setiap metode mengembalikan true. Jika setidaknya satu elemen tidak cocok dengan kondisinya, maka metode setiap () mengembalikan nilai FALSE.

beberapa ()

Beberapa () metode mirip dengan metode setiap (), hanya itu memeriksa apakah setidaknya satu elemen sesuai dengan kondisi. Dan dalam hal ini, beberapa () metode mengembalikan true. Jika item yang sesuai dengan kondisi dalam array tidak, maka nilai FALSE dikembalikan:

Nomor var \u003d [1, -12, 8, -4, 25, 42]; Kondisi fungsi (result var \u003d false; jika (nilai \u003d\u003d\u003d 8) (hasil \u003d benar;) hasil pengembalian;); var lulus \u003d angka. Beberapa (kondisi); // Benar.

saring ()

Metode filter (), seperti beberapa () dan setiap (), mengambil fungsi fungsi. Tetapi pada saat yang sama mengembalikan array elemen-elemen yang sesuai dengan kondisi ini:

Nomor var \u003d [1, -12, 8, -4, 25, 42]; Kondisi fungsi (result var \u003d false; if (nilai\u003e 0) (hasil \u003d true;) hasil pengembalian;); var filterednumbers \u003d angka. filter (kondisi); untuk (var i \u003d 0; i< filteredNumbers.length; i++) document.write(filteredNumbers[i] + "
");

Kesimpulan Di Browser:

1 8 25 42

foreach () dan peta ()

Metode foreach () dan peta () melaksanakan elemen-elemen yang ditanggung dan melakukan operasi tertentu dengan mereka. Misalnya, untuk menghitung kuadrat angka dalam array, Anda dapat menggunakan kode berikut:

Nomor var \u003d [1, 2, 3, 4, 5, 6]; untuk (var i \u003d 0; i "); }

Tetapi menggunakan metode foreach () Anda dapat menyederhanakan desain ini:

Nomor var \u003d [1, 2, 3, 4, 5, 6]; Function Square (Var Result \u003d Nilai * Nilai; Document.Write ("Alun-alun angka" + nilai + "sama dengan" + Hasil + "
");); Angka. Bertukeach (persegi);

Metode foreach () diterima sebagai parameter semua fungsi yang sama di mana item saat ini ditransmisikan selama kesalahan elemen dan operasi dilakukan di atasnya.

Metode peta () mirip dengan metode foreach, ia juga mengambil fungsi sebagai parameter yang dilakukan operasi pada elemen padat array, tetapi metode peta () mengembalikan array baru dengan hasil operasi di atas elemen array.

Misalnya, kami menggunakan metode peta untuk menghitung kuadrat dari nomor array:

Nomor var \u003d [1, 2, 3, 4, 5, 6]; Fungsi persegi (nilai, indeks, array) (hasil pengembalian \u003d nilai * nilai;); Var squarearray \u003d angka.map (persegi); Document.Write (Squarearray);

Fungsi yang ditransmisikan ke peta () Metode menerima elemen yang tidak teratur saat ini, melakukan operasinya dan mengembalikan sedikit nilai. Nilai ini kemudian jatuh ke dalam array squarearray yang dihasilkan