Artikel ini memperkenalkan kaedah operasi tatasusunan baharu yang akan dibawakan oleh ECMAScript 6 kepada kami, dan cara menggunakan ciri tatasusunan baharu ini dalam penyemak imbas sedia ada.
Nota: Saya akan menggunakan istilah pembina dan kelas secara bergantian.
Kaedah kelas
Kaedah yang dimiliki oleh Array sendiri.
Array.from(arrayLike, mapFunc?, thisArg?)
Fungsi asas Array.from() adalah untuk menukar dua jenis objek kepada tatasusunan.
Objek seperti tatasusunan
Benda jenis ini mempunyai sifat panjang dan indeks. Hasil pengendali DOM tergolong dalam kelas ini, seperti document.getElementsByClassName().
Objek boleh lelar
Apabila objek jenis ini mengambil nilai, ia hanya boleh mengambil satu elemen pada satu masa. Tatasusunan boleh diubah, sama seperti struktur tatasusunan baharu dalam ECMAScript, Peta dan Set.
Kod berikut ialah contoh menukar objek seperti tatasusunan kepada tatasusunan:
Hasil querySelectorAll() bukan tatasusunan, dan tiada kaedah forEach(). Inilah sebabnya mengapa kita perlu menukarnya kepada tatasusunan sebelum menggunakan kaedah ini.
Gunakan Pemetaan melalui Array.from()
Array.from() juga merupakan alternatif untuk menggunakan map() dengan generik.
Parameter kedua dalam kedua-dua kaedah ialah fungsi anak panah.
Dalam contoh ini, hasil document.querySelectorAll() ialah objek seperti tatasusunan, bukan tatasusunan. Inilah sebabnya kami tidak boleh memanggil map() secara langsung. Dalam contoh pertama, untuk menggunakan forEach(), kami menukar objek seperti tatasusunan kepada tatasusunan. Di sini kami menggunakan kaedah generik dan versi dua parameter Array.from(), menghapuskan langkah perantaraan.
Lubang
Array.from() mengabaikan unsur yang hilang - lubang - dalam tatasusunan dan menganggapnya sebagai unsur yang tidak ditentukan.
Ini bermakna anda boleh menggunakan Array.from() untuk mencipta atau mengisi tatasusunan:
Jika anda ingin mengisi tatasusunan dengan nilai tetap, maka Array.prototype.fill() (lihat di bawah) akan menjadi pilihan yang lebih baik. Yang pertama ialah dua cara contoh di atas.
dari()
dalam subkelas Array
Kes penggunaan lain untuk Array.from() adalah untuk menukar objek seperti tatasusunan atau objek boleh lelar kepada contoh subkelas tatasusunan (Array). Jika anda mencipta subkelas Array MyArray dan ingin menukar objek sedemikian kepada contoh MyArray, anda boleh menggunakan MyArray.from(). Sebab ini boleh digunakan ialah pembina diwarisi dalam ECMAScript 6 (pembina kelas induk ialah prototaip pembina subkelasnya).
Anda boleh menggabungkan fungsi ini dengan pemetaan dan melengkapkan operasi peta di tempat di mana anda mengawal pembina hasil:
Jika anda ingin menukar satu set nilai ke dalam tatasusunan, anda harus menggunakan tatasusunan literal. Terutama apabila terdapat hanya satu nilai dan ia adalah nombor, pembina tatasusunan akan gagal. Sila rujuk halaman ini untuk maklumat lanjut.
Apakah yang perlu kita lakukan jika kita ingin menukar satu set nilai ke dalam contoh sub-pembina angka? Ini ialah nilai Array.of() (ingat, subconstructor tatasusunan mewarisi semua kaedah tatasusunan, termasuk of() sudah tentu).
Array.of() akan menjadi sangat mudah untuk membungkus dan menyarangkan nilai dalam tatasusunan, tanpa kaedah pemprosesan pelik seperti Array(). Tetapi juga perhatikan Array.prototype.map(), terdapat perangkap di sini:
Seperti yang anda lihat, map() akan menghantar tiga parameter kepada panggilan baliknya. Dua yang terakhir sering diabaikan (perincian).
Kaedah prototaip
Banyak kaedah baharu akan tersedia untuk contoh tatasusunan.
Lelaran pada tatasusunan
Kaedah berikut akan membantu melengkapkan lelaran dalam tatasusunan:
Setiap kaedah di atas akan mengembalikan rentetan nilai, tetapi bukan sebagai tatasusunan. Mereka akan dipaparkan satu demi satu melalui iterator. Mari lihat contoh (saya akan menggunakan Array.from() untuk meletakkan kandungan iterator dalam tatasusunan):
Anda boleh menggabungkan entri() dengan gelung for-of dalam ECMAScript 6 untuk menguraikan objek yang diulang menjadi pasangan nilai kunci dengan mudah:
Nota: Kod ini sudah boleh dijalankan dalam penyemak imbas Firefox terkini. t Firefox.
Cari elemen tatasusunan
Array.prototype.find(predikat, thisArg?) akan mengembalikan elemen pertama yang memenuhi fungsi panggil balik. Jika tiada unsur yang memenuhi syarat, ia kembali tidak ditentukan. Contohnya:
akan mengembalikan indeks elemen pertama yang memenuhi fungsi panggil balik. Jika tiada unsur yang memuaskan ditemui, -1 dikembalikan. Contohnya:
Kedua-dua kaedah find* akan mengabaikan lubang, iaitu, mereka tidak akan memberi perhatian kepada elemen yang tidak ditentukan. Tandatangan fungsi penyiapan panggilan balik ialah:
predikat(elemen, indeks, tatasusunan)
Cari NaN
Array.prototype.indexOf() mempunyai had yang terkenal, iaitu, ia tidak dapat mencari NaN. Kerana ia menggunakan identiti (===) untuk mencari elemen padanan:
Menggunakan findIndex(), anda boleh menggunakan Object.is(), yang tidak akan menyebabkan masalah seperti itu:
Anda juga boleh mengambil pendekatan yang lebih umum dan mencipta fungsi pembantu elemIs():
Isi tatasusunan dengan nilai yang diberikan:
Lubang tidak akan menerima sebarang rawatan istimewa:
Anda juga boleh mengehadkan permulaan dan akhir pengisian anda:
Bilakah saya boleh menggunakan kaedah tatasusunan baharu?
Beberapa kaedah sudah tersedia dalam penyemak imbas.