摘要:對數(shù)組中每一項(xiàng)進(jìn)行給定函數(shù)返回該函數(shù)會(huì)返回的項(xiàng)組成新的數(shù)組??蛇x,規(guī)定回調(diào)函數(shù)所指向的對象。新增新操作數(shù)組的方法傳入一個(gè)回調(diào)函數(shù),找到數(shù)組中符合當(dāng)前搜索規(guī)則的第一個(gè)元素,返回它,并且終止搜索。必需,回調(diào)函數(shù),它制定了對數(shù)組元素的檢索規(guī)則。
迭代方法 1.every()
對數(shù)組中每一項(xiàng)進(jìn)行給定函數(shù),如果每一項(xiàng)都返回true,則返回true。
every(callback(element,index,array), thisArg)
callback:必需,對數(shù)組每一項(xiàng)所要執(zhí)行的函數(shù)。
thisArg:可選,規(guī)定callback回調(diào)函數(shù)this所指向的對象。
var numbers = [1,2,3,4,5,4,3,2,1]; var everyResult = numbers.every(function(item,index,array){ return item>2; }); console.log(everyResult); //false
var numbers = [1,2,3,4,5,4,3,2,1]; var obj = {num:2} var everyResult = numbers.every(function(item,index,array){ return item>this.num; },obj); console.log(everyResult); //false
特別說明:第一個(gè)參數(shù)是回調(diào)函數(shù),第二個(gè)參數(shù)是一個(gè)對象,它可以重置回調(diào)函數(shù)中this的指向。那么,上述代碼中回調(diào)函數(shù)的this就指向obj,于是this.num值等于2。
2.some()對數(shù)組中每一項(xiàng)進(jìn)行給定函數(shù),如果任意一項(xiàng)都返回true,則返回true
some(callback(element,index,array), thisArg)
callback:必需,對數(shù)組每一項(xiàng)所要執(zhí)行的函數(shù)。
thisArg:可選,規(guī)定callback回調(diào)函數(shù)this所指向的對象。
var numbers = [1,2,3,4,5,4,3,2,1]; var someResult = numbers.some(function(item,index,array){ return item>2; }); console.log(someResult); //true var numbers = [1,2,3,4,5,4,3,2,1]; var obj = {num:2} var someResult = numbers.some(function(item,index,array){ return item>this.num; },obj); console.log(someResult); //true3.filter()
對數(shù)組中每一項(xiàng)進(jìn)行給定函數(shù),返回該函數(shù)會(huì)返回true的項(xiàng)組成新的數(shù)組。
filter(callback(element,index,array), thisArg)
callback:必需,對數(shù)組每一項(xiàng)所要執(zhí)行的函數(shù)。
thisArg:可選,規(guī)定callback回調(diào)函數(shù)this所指向的對象。
var numbers = [1,2,3,4,5,4,3,2,1]; var filterResult = numbers.filter(function(item,index,array){ return item>2; }); console.log(filterResult); // [3,4,5,4,3]
var numbers = [1,2,3,4,5,4,3,2,1]; var obj = {num:2} var filterResult = numbers.filter(function(item,index,array){ return item>this.num; },obj); console.log(filterResult); // [3,4,5,4,3]4.map()
對數(shù)組中每一項(xiàng)進(jìn)行給定函數(shù),返回每次函數(shù)調(diào)用的結(jié)果組成的新數(shù)組。
map(callback(element,index,array), thisArg)
callback:必需,對數(shù)組每一項(xiàng)所要執(zhí)行的函數(shù)。
thisArg:可選,規(guī)定callback回調(diào)函數(shù)this所指向的對象。
var numbers = [1,2,3,4,5,4,3,2,1]; var mapResult = numbers.map(function(item,index,array){ return item*2; }); alert(mapResult); // [2, 4, 6, 8, 10, 8, 6, 4, 2]
var numbers = [1,2,3,4,5,4,3,2,1]; var obj = {num:2} var mapResult = numbers.map(function(item,index,array){ return item*this.num; },obj); alert(mapResult); // [2, 4, 6, 8, 10, 8, 6, 4, 2]5.forEach()
對數(shù)組中每一項(xiàng)進(jìn)行給定函數(shù),沒有返回值,和for循環(huán)類似。
forEach(callback(element,index,array), thisArg)
callback:必需,對數(shù)組每一項(xiàng)所要執(zhí)行的函數(shù)。
thisArg:可選,規(guī)定callback回調(diào)函數(shù)this所指向的對象。
var numbers = [1,2,3,4,5,4,3,2,1]; numbers.forEach(function(item,index,array){ console.log(item*2) }); //2, 4, 6, 8, 10, 8, 6, 4, 2 console.log(numbers) //1,2,3,4,5,4,3,2,1
var numbers = [1,2,3,4,5,4,3,2,1]; var obj = {num:2} numbers.forEach(function(item,index,array){ console.log(item*this.num) },obj); //2, 4, 6, 8, 10, 8, 6, 4, 2歸并方法
ES5新增了兩個(gè)歸并數(shù)組的方法:reduce(callback(prev,cur,index,array))和reduceRight(callback(prev,cur,index,array))。這兩個(gè)方法迭代數(shù)組所有項(xiàng),然后構(gòu)建一個(gè)最終返回的值。reduce從左到右,reduceRight從右到左。
prev:前一個(gè)值
cur:當(dāng)前值
index:下標(biāo)
array:數(shù)組對象
var numbers = [1,2,3,4,5]; var sum = numbers.reduce(function(prev,cur,index,array){ return prev + cur; }); console.log(sum); //15
這個(gè)函數(shù)返回的任何值都會(huì)作為第一個(gè)參數(shù)自動(dòng)傳給下一項(xiàng)。第一次迭代發(fā)生在第二項(xiàng)上,因此第一個(gè)參數(shù)是數(shù)組的第一項(xiàng),第二個(gè)參數(shù)是數(shù)組的第二項(xiàng)。
檢測數(shù)組 1.instanceofES3的方法
var numbers = [1,2,3]; if(numbers instanceof Array){ //對數(shù)組進(jìn)行某些操作 }2.Array.isArray
ES5的方法
var numbers = [1,2,3]; if(Array.isArray(numbers)){ //對數(shù)組進(jìn)行某些操作 }數(shù)組轉(zhuǎn)化成字符串 1.toLocaleString() toString()
var numbers = [1,2,3]; console.log(numbers.toLocaleString()) //1,2,3 console.log(numbers.toString())//1,2,32.join()
將數(shù)組轉(zhuǎn)換為字符串,且用分隔符分割
var numbers = [1,2,3]; alert(numbers.join("|")); // 1|2|3棧方法
棧方法是指Last-In-First-Out后進(jìn)先出
push() 從數(shù)組末尾添加 pop() 從數(shù)組末尾移除隊(duì)列方法
隊(duì)列方法是First-In-First-Out先進(jìn)先出
shift() 從數(shù)組前端移除 unshift() 從數(shù)組前端添加重排序方法 1.reverse()
反轉(zhuǎn)數(shù)組
var numbers = [1,2,3]; console.log(numbers.reverse()) //3,2,12.sort()
var numbers = [0,1,5,10,15]; numbers.sort(function(a,b){ return b-a; }); console.log(numbers); //[15, 10, 5, 1, 0]操作方法 1.concat()
用于復(fù)制或者從尾部添加,創(chuàng)建新數(shù)組。
concat(n1,n2,...,nN)
n1,n2,...,nN:都可選,既可以是數(shù)組,也可以是單個(gè)字符。
var numbers = [1,2,3]; var n1 = values.concat(); //復(fù)制 var n2 = values.concat(4); //尾部添加 var n3 = n1.concat(n2,10,11); //尾部添加 console.log(numbers); //[1,2,3] console.log(n1); //[1,2,3] console.log(n2); //[1,2,3,4] console.log(n3); //[1, 2, 3, 1, 2, 3, 4,10,11]2.slice()
用于復(fù)制或截取數(shù)組,創(chuàng)建新數(shù)組。
slice(start,end)
strat:可選,數(shù)組其實(shí)位置,截取的時(shí)候包括其實(shí)位置
end:可選,結(jié)束位置,截取的時(shí)候不包括結(jié)束位置
var numbers = [1,2,3]; var n1 = numbers.slice(); //復(fù)制 var n2 = numbers.slice(1); //截取 var n3 = numbers.slice(1,3); //截取 console.log(numbers); //[1,2,3] console.log(n1); //[1,2,3] console.log(n2); //[2,3] console.log(n3); //[2,3]3.splice()
用于刪除、插入、替換,號(hào)稱最強(qiáng)大的數(shù)組方法
刪除:可以刪除任意數(shù)量的項(xiàng),需要兩個(gè)參數(shù),要?jiǎng)h除的第一項(xiàng)的位置和要?jiǎng)h除的項(xiàng)數(shù)
splice(start,num) var values = [1,2,3,4,5,6]; var v = values.splice(0,2); console.log(values); //[3,4,5,6] console.log(v); //[1,2]
插入和替換:至少三個(gè)參數(shù),第一個(gè)是起始位置,第二個(gè)是要?jiǎng)h除的項(xiàng)數(shù),第三個(gè)及以后是要插入或替換的值。
splice(start,num,n1,n2,...,nN) //插入demo var values = [1,2,3,4,5,6]; var v1 = values.splice(1,0,1,1,1); console.log(values); //[1,1,1,1,2,3,4,5,6] console.log(v1); //[] //替換demo var values = [1,2,3,4,5,6]; var v1 = values.splice(1,2,1,1,1); console.log(values); //[1,1,1,1,4,5,6] console.log(v1); //[2,3]位置方法
indexOf(value,start) lastIndexOf(value,start)
都接受兩個(gè)參數(shù):查找的值、查找起始位置。不存在,返回 -1 ;存在,返回位置。
indexOf 是從前往后查找, lastIndexOf 是從后往前查找。
var numbers = [1,2,3,4,5,6,7,8,9,5,3]; console.log(numbers.indexOf(5)) //4 console.log(numbers.lastIndexOf(5)) //9ES6新增新操作數(shù)組的方法 1.find()
傳入一個(gè)回調(diào)函數(shù),找到數(shù)組中符合當(dāng)前搜索規(guī)則的第一個(gè)元素,返回它,并且終止搜索。
find(callback(element,index,array), thisArg)
callback:必需,回調(diào)函數(shù),它制定了對數(shù)組元素的檢索規(guī)則。
thisArg:可選,用來規(guī)定回調(diào)函數(shù)中this所指向的對象。
let arr = [2,3,4,5,6,7,8,9,10]; let elem=arr.find(function (ele) { if (ele > 4) { return true } }) console.log(elem); //5
let arr = [2,3,4,5,6,7,8,9,10]; let obj = {num: 4}; let elem=arr.find(function (ele) { if (ele > this.num) { return true } },obj) console.log(elem); //52.findIndex()
傳入一個(gè)回調(diào)函數(shù),找到數(shù)組中符合當(dāng)前搜索規(guī)則的第一個(gè)元素,返回它的下標(biāo),終止搜索。
findIndex(callback(element,index,array), thisArg)
callback:必需,回調(diào)函數(shù),它制定了對數(shù)組元素的檢索規(guī)則。
thisArg:可選,用來規(guī)定回調(diào)函數(shù)中this所指向的對象。
let arr = [2,3,4,5,6,7,8,9,10]; let elem=arr.findIndex(function (ele) { if (ele > 4) { return true } }) console.log(elem); //3
let arr = [2,3,4,5,6,7,8,9,10]; let obj = {num: 4}; let elem=arr.findIndex(function (ele) { if (ele > this.num) { return true } },obj) console.log(elem); //33.fill()
用新元素替換掉數(shù)組內(nèi)的元素,可以指定替換下標(biāo)范圍。
fill(value,start,end)
value:必需,用來進(jìn)行填充的值。
start:可選,規(guī)定填充開始位置,默認(rèn)從索引0處開始。
end:可選,規(guī)定填充結(jié)束位置,默認(rèn)填充到數(shù)組結(jié)尾。
const arr = ["a", "b", "c", "d"] console.log(arr.fill("ss", 1, 3)) //?["a", "ss", "ss", "d"] const arr2 = ["a", "b", "c", "d"] console.log(arr.fill("ss")) //?["ss", "ss", "ss", "ss"]4.includes()
判斷數(shù)組中是否存在該元素,可以替換 ES5 時(shí)代的 indexOf 判斷方式。
includes(value,start)
value:必需,要檢測的元素。
start:可選,規(guī)定填充開始位置,默認(rèn)從索引0處開始。
let arr = ["a", "b","c", "d", NaN] arr.includes("a") //true arr.includes(NaN) //true arr.indexOf(NaN) //-15.Array.from()
方法可以將指定的參數(shù)轉(zhuǎn)換為真正的數(shù)組。當(dāng)然并不是任意參數(shù)都是可以被轉(zhuǎn)換為數(shù)組,可以轉(zhuǎn)換的參數(shù)如下:類數(shù)組對象、具有遍歷器接口的對象。
Array.from(arrayLike, mapFn, thisArg)
arrayLike:必需,將要被轉(zhuǎn)換為真正數(shù)組的類數(shù)組或者具有遍歷器接口的對象。
mapFn:可選,對參數(shù)arrayLike中的數(shù)據(jù)進(jìn)行處理并返回,作為新數(shù)組的元素。
thisArg:可選,規(guī)定mapFn的調(diào)用對象,那么mapFn中的this將會(huì)指向此調(diào)用對象。
let obj = { "0": "螞蟻部落", "1": "www.softwhy.com", "2": 6, "3":"ES2015", length:4 }; console.log(Array.from(obj)); //?["螞蟻部落", "www.softwhy.com", 6, "ES2015"] obj = { "a": "螞蟻部落", "b": "www.softwhy.com", "c": 6, "d":"ES2015", length:4 }; console.log(Array.from(obj)); //[undefined, undefined, undefined, undefined] obj = { length:3 }; console.log(Array.from(obj)); //[undefined, undefined, undefined]
上述代碼將類數(shù)組對象轉(zhuǎn)換為真正的數(shù)組,什么是類數(shù)組對象:很多材料上對類數(shù)組的描述比較嚴(yán)苛,其實(shí)很簡單,只要一個(gè)對象具有length屬性就是類數(shù)組。當(dāng)然一個(gè)類數(shù)組對象,如果屬性恰好類似于數(shù)組遞增式索引,那就更好了,比如上面代碼中的對象。上面對象只有一個(gè)length屬性,他也是一個(gè)類數(shù)組對象,只不過生成的數(shù)組元素都是undefined。
let str = "螞蟻部落"; console.log(Array.from(str)); //?["螞", "蟻", "部", "落"]
因?yàn)樽址?strong>具有遍歷器接口,那么字符串也可以生成數(shù)組,數(shù)組的每一個(gè)元素,就是構(gòu)成字符串的字符。
let obj = { "0": 1, "1": 2, "2": 3, "3": 4, length:4 }; let thisObj = { num:2 } console.log(Array.from(obj, function (elem, index) { return elem * this.num }, thisObj)); //[2, 4, 6, 8]
擴(kuò)展:展開運(yùn)算符生成數(shù)組
let str="螞蟻部落"; console.log([...str]); //["螞", "蟻", "部", "落"]6.Array.of()
Array.of(element0,element1,...,elementN)
此方法可以接受任意類型的參數(shù),參數(shù)之間用逗號(hào)分隔,并且能夠?qū)?shù)轉(zhuǎn)換為數(shù)組。
console.log(Array.of(2)); //[2] console.log(Array.of(2,3,4)); //[2,3,4]
擴(kuò)展:Array()與Array.of()方法區(qū)別
console.log(Array(2)) // [undefined, undefined] console.log(Array.of(2)) // [2] console.log(Array(2,3,4)) // [2,3,4] console.log(Array.of(2,3,4)) // [2,3,4]
這個(gè)方法的主要目的,是彌補(bǔ)數(shù)組構(gòu)造函數(shù) Array() 的不足。
7.entries()返回迭代器:返回一個(gè)遍歷器對象【鍵值對】
//數(shù)組 const arr = ["a", "b", "c"]; for(let v of arr.entries()) { console.log(v) } // [0, "a"] [1, "b"] [2, "c"] for(let [key, value] of arr.entries()) { console.log(key+"--"+value) } //0--a 1--b 2--c //Set const arr = new Set(["a", "b", "c"]); for(let v of arr.entries()) { console.log(v) } // ["a", "a"] ["b", "b"] ["c", "c"] //Map const arr = new Map(); arr.set("a", "a"); arr.set("b", "b"); for(let v of arr.entries()) { console.log(v) } // ["a", "a"] ["b", "b"]8.keys()
返回迭代器:返回鍵值對的key
//數(shù)組 const arr = ["a", "b", "c"]; for(let v of arr.keys()) { console.log(v) } // 0 1 2 //Set const arr = new Set(["a", "b", "c"]); for(let v of arr.keys()) { console.log(v) } // "a" "b" "c" //Map const arr = new Map(); arr.set("a", "a"); arr.set("b", "b"); for(let v of arr.keys()) { console.log(v) } // "a" "b"9.values()
返回迭代器:返回鍵值對的value
//數(shù)組 const arr = ["a", "b", "c"]; for(let v of arr.values()) { console.log(v) } //"a" "b" "c" //Set const arr = new Set(["a", "b", "c"]); for(let v of arr.values()) { console.log(v) } // "a" "b" "c" //Map const arr = new Map(); arr.set("a", "a"); arr.set("b", "b"); for(let v of arr.values()) { console.log(v) }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/102674.html
摘要:在同一個(gè)塊內(nèi),不允許用重復(fù)聲明變量。中為新增了塊級(jí)作用域。自帶遍歷器的對象有數(shù)組字符串類數(shù)組對象對象的對象等和結(jié)構(gòu)對象。返回一個(gè)遍歷器,使遍歷數(shù)組的鍵值對鍵名鍵值。 目錄 1.語法 2.類型、值和變量 3.表達(dá)式和運(yùn)算符 4.語句 5.數(shù)組 6.對象 7.函數(shù) 8.全局屬性和方法 9.詞法作用域、作用域鏈、閉包 10.原型鏈、繼承機(jī)制 11.this的理解 12.ES5新特性 13.E...
摘要:如果數(shù)組已經(jīng)為空,則不改變數(shù)組,并返回值。中所有在數(shù)組被修改時(shí)都遵從這個(gè)原則,以下不再重復(fù)方法會(huì)給原數(shù)組中的每個(gè)元素都按順序調(diào)用一次函數(shù)。每次執(zhí)行后的返回值沒有指定返回值則返回組合起來 數(shù)組應(yīng)該是我們在寫程序中應(yīng)用到最多的數(shù)據(jù)結(jié)構(gòu)了,相比于無序的對象,有序的數(shù)組幫我們在處理數(shù)據(jù)時(shí),實(shí)在是幫了太多的忙了。今天剛好看到一篇Array.include的文章,忽然發(fā)現(xiàn)經(jīng)過幾個(gè)ES3,ES5,E...
摘要:它用來比較兩個(gè)值是否嚴(yán)格相等,與嚴(yán)格比較運(yùn)算符的行為基本一致。兩個(gè)對象的地址不一樣與嚴(yán)格比較運(yùn)算符的不同之處只有兩個(gè)一是不等于,二是等于自身基本用法方法用于對象的合并,將源對象的所有可枚舉屬性,賦值到目標(biāo)對象。 這是ES6的入門篇教程的筆記,網(wǎng)址:鏈接描述,以下內(nèi)容中粗體+斜體表示大標(biāo)題,粗體是小標(biāo)題,還有一些重點(diǎn);斜體表示對于自身,還需要下功夫?qū)W習(xí)的內(nèi)容。這里面有一些自己的見解,所以...
摘要:操作符或調(diào)用函數(shù)時(shí)傳入?yún)?shù)的操作都會(huì)導(dǎo)致關(guān)聯(lián)作用域的賦值操作。此外可以使用和來設(shè)置對象及其屬性的不可變性級(jí)別。忽視這一點(diǎn)會(huì)導(dǎo)致許多問題。使用調(diào)用函數(shù)時(shí)會(huì)把新對象的屬性關(guān)聯(lián)到其他對象。 前言 《你不知道的 javascript》是一個(gè)前端學(xué)習(xí)必讀的系列,讓不求甚解的JavaScript開發(fā)者迎難而上,深入語言內(nèi)部,弄清楚JavaScript每一個(gè)零部件的用途。本書介紹了該系列的兩個(gè)主題:...
閱讀 1833·2021-09-22 15:23
閱讀 3255·2021-09-04 16:45
閱讀 1842·2021-07-29 14:49
閱讀 2767·2019-08-30 15:44
閱讀 1523·2019-08-29 16:36
閱讀 1038·2019-08-29 11:03
閱讀 1504·2019-08-26 13:53
閱讀 504·2019-08-26 11:57