cari
Rumahhujung hadapan webtutorial jsECMAScript 6 tidak lama lagi akan membawakan kepada kita pratonton kemahiran operasi tatasusunan baru method_javascript

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:

Salin kod Kod adalah seperti berikut:

biarkan lis = document.querySelectorAll('ul.fancy li');
Array.from(lis).forEach(function (li) {
console.log(nod);
});

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.

Salin kod Kod adalah seperti berikut:

biarkan span = document.querySelectorAll('span.name');
// map(), secara umum:
biarkan nama1 = Array.prototype.map.call(spans, s => s.textContent);
// Array.from():
biarkan nama2 = Array.from(spans, s => s.textContent);

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.

Salin kod Kod adalah seperti berikut:

> Array.from([0,,2])
[ 0, undefined, 2 ]

Ini bermakna anda boleh menggunakan Array.from() untuk mencipta atau mengisi tatasusunan:

Salin kod Kod adalah seperti berikut:

> Array.from(new Array(5), () => 'a')
[ 'a', 'a', 'a', 'a', 'a' ]
> Array.from(New Array(5), (x,i) => i)
[ 0, 1, 2, 3, 4 ]

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).

Salin kod Kod adalah seperti berikut:

kelas MyArray memanjangkan Array {
...
}
biarkan instanceOfMyArray = MyArray.from(anIterable);

Anda boleh menggabungkan fungsi ini dengan pemetaan dan melengkapkan operasi peta di tempat di mana anda mengawal pembina hasil:

Salin kod Kod adalah seperti berikut:

// from() – tentukan pembina hasil melalui penerima
// (dalam kes ini, MyArray)
biarkan instanceOfMyArray = MyArray.from([1, 2, 3], x => x * x);
// map(): hasilnya sentiasa merupakan contoh Array
biarkan instanceOfArray = [1, 2, 3].map(x => x * x);
Tatasusunan(...item)

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.

Salin kod Kod adalah seperti berikut:

> Tatasusunan baharu(3, 11, 8)
[ 3, 11, 8 ]
> Tatasusunan baharu(3)
[ , , ,]
> Tatasusunan baharu(3.1)
RangeError: Panjang tatasusunan tidak sah

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).

Salin kod Kod adalah seperti berikut:

kelas MyArray memanjangkan Array {
...
}
console.log(MyArray.of(3, 11, 8) instanceof MyArray); // true
console.log(MyArray.of(3).length === 1); // true

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:

Salin kod Kod adalah seperti berikut:

> ['a', 'b'].peta(Array.of)
[ [ 'a', 0, [ 'a', 'b' ] ],
[ 'b', 1, [ 'a', 'b' ] ] ]
> ['a', 'b'].map(x => Array.of(x)) // lebih baik
[ [ 'a' ], [ 'b' ] ]
> ['a', 'b'].map(x => [x]) // terbaik (dalam kes ini)
[ [ 'a' ], [ 'b' ] ]

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:

Salin kod Kod adalah seperti berikut:

Array.prototype.entry()
Array.prototype.keys()
Array.prototype.values()

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

Salin kod Kod adalah seperti berikut:

> Array.from([ 'a', 'b' ].keys())
[ 0, 1 ]
> Array.from([ 'a', 'b' ].values())
[ 'a', 'b' ]
> Array.from([ 'a', 'b' ].entry())
[ [ 0, 'a' ],
[ 1, 'b' ] ]

Anda boleh menggabungkan entri() dengan gelung for-of dalam ECMAScript 6 untuk menguraikan objek yang diulang menjadi pasangan nilai kunci dengan mudah:

Salin kod Kod adalah seperti berikut:

untuk (biar [indeks, elem] daripada ['a', 'b'].entri()) {
console.log(index, elem);
}

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:

Salin kod Kod adalah seperti berikut:

> [6, -5, 8].cari(x => x -5
> [6, 5, 8].cari(x => x tidak ditentukan
Array.prototype.findIndex(predikat, thisArg?)

akan mengembalikan indeks elemen pertama yang memenuhi fungsi panggil balik. Jika tiada unsur yang memuaskan ditemui, -1 dikembalikan. Contohnya:

Salin kod Kod adalah seperti berikut:

> [6, -5, 8].cariIndex(x => x 1
> [6, 5, 8].cariIndex(x => x -1

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

melalui findIndex()

Array.prototype.indexOf() mempunyai had yang terkenal, iaitu, ia tidak dapat mencari NaN. Kerana ia menggunakan identiti (===) untuk mencari elemen padanan:

Salin kod Kod adalah seperti berikut:

> [NaN].indexOf(NaN)
-1

Menggunakan findIndex(), anda boleh menggunakan Object.is(), yang tidak akan menyebabkan masalah seperti itu:

Salin kod Kod adalah seperti berikut:

> [NaN].findIndex(y => Object.is(NaN, y))
0

Anda juga boleh mengambil pendekatan yang lebih umum dan mencipta fungsi pembantu elemIs():

Salin kod Kod adalah seperti berikut:

> fungsi elemIs(x) { return Object.is.bind(Object, x) }
> [NaN].findIndex(elemIs(NaN))
0
Array.prototype.fill(nilai, mula?, tamat?)

Isi tatasusunan dengan nilai yang diberikan:

Salin kod Kod adalah seperti berikut:

> ['a', 'b', 'c'].isi(7)
[ 7, 7, 7 ]

Lubang tidak akan menerima sebarang rawatan istimewa:

Salin kod Kod adalah seperti berikut:

> Array(3) baharu.isi(7)
[ 7, 7, 7 ]

Anda juga boleh mengehadkan permulaan dan akhir pengisian anda:

Salin kod Kod adalah seperti berikut:

> ['a', 'b', 'c'].isi(7, 1, 2)
[ 'a', 7, 'c' ]

Bilakah saya boleh menggunakan kaedah tatasusunan baharu?
Beberapa kaedah sudah tersedia dalam penyemak imbas.

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
es2017是es6还是es8es2017是es6还是es8Oct 27, 2022 pm 05:37 PM

es2017是es8。es全称“ECMAScript”,是根据ECMA-262标准实现的通用脚本语言,而由2017年6月正式发布的版本,其正式名为ECMAScript2017(ES2017),因其是ECMAScript的第8个版本,因此可简称为es8。

php 怎么求2个数组相同的元素php 怎么求2个数组相同的元素Dec 23, 2022 am 10:04 AM

php求2个数组相同元素的方法:1、创建一个php示例文件;2、定义两个有相同元素的数组;3、使用“array_intersect($array1,$array2)”或“array_intersect_assoc()”方法获取两个数组相同元素即可。

c语言数组如何初始化c语言数组如何初始化Jan 04, 2023 pm 03:36 PM

C语言数组初始化的三种方式:1、在定义时直接赋值,语法“数据类型 arrayName[index] = {值};”;2、利用for循环初始化,语法“for (int i=0;i<3;i++) {arr[i] = i;}”;3、使用memset()函数初始化,语法“memset(arr, 0, sizeof(int) * 3)”。

用Python实现动态数组:从入门到精通用Python实现动态数组:从入门到精通Apr 21, 2023 pm 12:04 PM

Part1聊聊Python序列类型的本质在本博客中,我们来聊聊探讨Python的各种“序列”类,内置的三大常用数据结构——列表类(list)、元组类(tuple)和字符串类(str)的本质。不知道你发现没有,这些类都有一个很明显的共性,都可以用来保存多个数据元素,最主要的功能是:每个类都支持下标(索引)访问该序列的元素,比如使用语法Seq[i]​。其实上面每个类都是使用数组这种简单的数据结构表示。但是熟悉Python的读者可能知道这3种数据结构又有一些不同:比如元组和字符串是不能修改的,列表可以

c++数组怎么初始化c++数组怎么初始化Oct 15, 2021 pm 02:09 PM

c++初始化数组的方法:1、先定义数组再给数组赋值,语法“数据类型 数组名[length];数组名[下标]=值;”;2、定义数组时初始化数组,语法“数据类型 数组名[length]=[值列表]”。

一文快速详解ES6~ES12的全部特性!一文快速详解ES6~ES12的全部特性!Jul 22, 2022 am 11:06 AM

本篇文章给大家整理分享一下ECMAScript特性,带大家花一个小时,迅速了解ES6~ES12的全部特性。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

javascript怎么给数组中增加元素javascript怎么给数组中增加元素Nov 04, 2021 pm 12:07 PM

增加元素的方法:1、使用unshift()函数在数组开头插入元素;2、使用push()函数在数组末尾插入元素;3、使用concat()函数在数组末尾插入元素;4、使用splice()函数根据数组下标,在任意位置添加元素。

php怎么判断数组里面是否存在某元素php怎么判断数组里面是否存在某元素Dec 26, 2022 am 09:33 AM

php判断数组里面是否存在某元素的方法:1、通过“in_array”函数在数组中搜索给定的值;2、使用“array_key_exists()”函数判断某个数组中是否存在指定的key;3、使用“array_search()”在数组中查找一个键值。

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Alat panas

SublimeText3 Linux versi baharu

SublimeText3 Linux versi baharu

SublimeText3 Linux versi terkini

EditPlus versi Cina retak

EditPlus versi Cina retak

Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

Dreamweaver Mac版

Dreamweaver Mac版

Alat pembangunan web visual