亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

數(shù)組空位元素的處理

Yujiaao / 405人閱讀

之前看到知乎上的這道題:如何不使用loop循環(huán),創(chuàng)建一個(gè)長(zhǎng)度為100的數(shù)組,并且每個(gè)元素的值等于它的下標(biāo)?,在這個(gè)問(wèn)題里面題主提到,他寫(xiě)了這么一段代碼:

"use strict"
let arr = Array(100).map( (item,idx) =>  idx)

結(jié)果arr是一個(gè)有100個(gè)空位的數(shù)組:

這說(shuō)明Array.prototype.map()會(huì)跳過(guò)空位元素嘛。

然后我在下面的答案里看到這么一條:

Array.from(new Array(100), (item, idx) => idx)

//or the alternative
Array.from({length: 5}, (item, idx) => idx)

我本來(lái)是覺(jué)得,這個(gè)肯定也不行嘛,這倆都是用Array構(gòu)造函數(shù)新建了一個(gè)全是空位的數(shù)組嘛,怎么會(huì)不一樣呢?結(jié)果試了一下之后發(fā)現(xiàn)居然成功地得到了數(shù)組。我開(kāi)始懷疑Array.from的map函數(shù)的實(shí)現(xiàn)和Array.prototype.map有不一樣的地方。再加上MDN的文檔也來(lái)?yè)v亂:

Array.from(arrayLike[, mapFn[, thisArg]])

#arrayLike

An array-like or iterable object to convert to an array.

#mapFn

Optional. Map function to call on .

#thisArg

Optional. Value to use as this when executing mapFn.

在這里mapFn下面明確地指出mapFn會(huì)調(diào)用every element of the array.

而在map函數(shù)那邊:

callback is invoked only for indexes of the array which have assigned values, including undefined. It is not called for missing elements of the array.

明確說(shuō)明會(huì)跳過(guò)空位元素,所以我就想是不是這倆家伙的map方法本身不一致。

當(dāng)然結(jié)論并沒(méi)有這么厲害 Orz...后來(lái)我偶然間發(fā)現(xiàn)原來(lái)是因?yàn)?b>Array.from()方法會(huì)把數(shù)組的空位轉(zhuǎn)為undefined.也就是說(shuō)數(shù)組空位元素的處理和map方法的實(shí)現(xiàn)是無(wú)關(guān)的。

數(shù)組空位元素的處理

forEach(), filter(), every()some()都會(huì)跳過(guò)空位。

map()會(huì)跳過(guò)空位,但會(huì)保留這個(gè)值

join()toString()會(huì)將空位視為undefined,而undefinednull會(huì)被處理成空字符串

// forEach方法
[,"a"].forEach((x,i) => log(i)); // 1

// filter方法
["a",,"b"].filter(x => true) // ["a","b"]

// every方法
[,"a"].every(x => x==="a") // true

// some方法
[,"a"].some(x => x !== "a") // false

// map方法
[,"a"].map(x => 1) // [,1]

// join方法
[,"a",undefined,null].join("#") // "#a##"

// toString方法
[,"a",undefined,null].toString() // ",a,,"

ES6則是明確將空位轉(zhuǎn)為undefined,Array.from方法會(huì)將數(shù)組的空位轉(zhuǎn)為undefined,也就是說(shuō),這個(gè)方法不會(huì)忽略空位:

Array.from(["a",,"b"])
// [ "a", undefined, "b" ]

擴(kuò)展運(yùn)算符(...)也會(huì)將空位轉(zhuǎn)為undefined:

[...["a",,"b"]]
// [ "a", undefined, "b" ]

for...of循環(huán)也會(huì)遍歷空位:

let arr = [, ,];
for (let i of arr) {
  console.log(1);
}
// 1
// 1

entries()、keys()、values()、find()findIndex()會(huì)將空位處理成undefined:

// entries()
[...[,"a"].entries()] // [[0,undefined], [1,"a"]]

// keys()
[...[,"a"].keys()] // [0,1]

// values()
[...[,"a"].values()] // [undefined,"a"]

// find()
[,"a"].find(x => true) // undefined

// findIndex()
[,"a"].findIndex(x => true) // 0

參考:阮一峰ES2015

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/79006.html

相關(guān)文章

  • JavaScript學(xué)習(xí)之數(shù)組(下)

    摘要:數(shù)組篇方法函數(shù)可以將函數(shù)作為參數(shù)傳入,并將數(shù)組中每個(gè)元素代入函數(shù)進(jìn)行處理返回,返回一個(gè)新的數(shù)組可以看出可以傳入兩個(gè)參數(shù),第一個(gè)參數(shù)中函數(shù)可以填入三個(gè)參數(shù),數(shù)組的元素,數(shù)組的索引,數(shù)組本身第二個(gè)參數(shù)用來(lái)綁定回調(diào)函數(shù)內(nèi)部的注意點(diǎn)當(dāng)元素為空位,, 數(shù)組篇 map()方法 map函數(shù)可以將函數(shù)作為參數(shù)傳入,并將數(shù)組中每個(gè)元素代入函數(shù)進(jìn)行處理返回,返回一個(gè)新的數(shù)組 arr.map(functio...

    Labradors 評(píng)論0 收藏0
  • JavaScript 小知識(shí)點(diǎn)

    摘要:比如,構(gòu)造函數(shù)返回的數(shù)組都是空位。方法方法方法方法方法方法方法方法對(duì)空位的處理則是明確將空位轉(zhuǎn)為。在這些情況下,迭代器關(guān)閉。 原型鏈相關(guān) 最詳盡的 JS 原型與原型鏈終極詳解 isNaN() 和 Number.isNaN() 的區(qū)別 isNaN() 是 ES1 規(guī)范; 是全局方法; 如果參數(shù)不是一個(gè) Number 類(lèi)型,會(huì)先嘗試將參數(shù)轉(zhuǎn)化為數(shù)值,然后對(duì)轉(zhuǎn)換后的結(jié)果進(jìn)行是否是 Na...

    馬永翠 評(píng)論0 收藏0
  • ES6: 數(shù)組

    摘要:中的方法遍歷一下數(shù)組中的每個(gè)選項(xiàng)返回一個(gè)新的數(shù)組。還可以接受第二個(gè)參數(shù),作用類(lèi)似與數(shù)組的方法,用于對(duì)每個(gè)元素進(jìn)行處理。這個(gè)方式是用于將一組值,轉(zhuǎn)換為數(shù)組??蛇x到該位置前停止讀取數(shù)據(jù),默認(rèn)等于數(shù)組長(zhǎng)度。如果是負(fù)數(shù),表示倒數(shù)。 ES6中數(shù)組增加了很多新的方法,但是先回顧下之前ES5中的數(shù)組的方法。 ES5中的方法 Array.prototype.forEach 遍歷一下數(shù)組中的每個(gè)選...

    lavor 評(píng)論0 收藏0
  • ECMAScript6 新特性——“數(shù)組擴(kuò)展”

    摘要:原來(lái)的也被修改了數(shù)組實(shí)例的喝方法,用于找出第一個(gè)符合條件的數(shù)組成員。它的參數(shù)是一個(gè)回調(diào)函數(shù),所有數(shù)組成員依次執(zhí)行該回調(diào)函數(shù),直到找出第一個(gè)返回值為的成員,然后返回該成員。數(shù)組實(shí)例的方法使用給定值,填充一個(gè)數(shù)組。 1 Array.from() Array.from方法用于將兩類(lèi)對(duì)象轉(zhuǎn)為真正的數(shù)組:類(lèi)似數(shù)組的對(duì)象(array-like object)和可遍歷(iterable)的對(duì)象(包括...

    Eminjannn 評(píng)論0 收藏0
  • 你不知道數(shù)組

    摘要:數(shù)組定義數(shù)組是按次序排列的一組值每個(gè)值都有編號(hào),從開(kāi)始可以在定義時(shí)賦值,也可以先定義后賦值任何類(lèi)型的數(shù)據(jù)都可以存入數(shù)組數(shù)組的本質(zhì)本質(zhì)上,數(shù)組屬于一種特殊的對(duì)象,它的鍵名是按次序排列的一組整數(shù)數(shù)組成員的鍵名是固定的,因此不用為每個(gè)元素指定鍵名 數(shù)組定義 數(shù)組是按次序排列的一組值 每個(gè)值都有編號(hào),從0開(kāi)始 可以在定義時(shí)賦值,也可以先定義后賦值 任何類(lèi)型的數(shù)據(jù)都可以存入數(shù)組 ...

    beita 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<