摘要:通常我們在項(xiàng)目過程中,難免會(huì)碰到各種對于數(shù)組的操作,或是是一些業(yè)務(wù)邏輯中,使用數(shù)組自帶方法,可以更加靈活的達(dá)到預(yù)期效果。
forEach通常我們在項(xiàng)目過程中,難免會(huì)碰到各種對于數(shù)組的操作,或是是一些業(yè)務(wù)邏輯中,使用數(shù)組自帶方法,可以更加靈活的達(dá)到預(yù)期效果。
這里對一些常用的數(shù)組方法進(jìn)行總結(jié),順便記錄下使用中的小技巧,方便后面進(jìn)行查詢
使用頻率最高的數(shù)組遍歷方法,效果與for循環(huán)相似,對數(shù)組中每一項(xiàng)進(jìn)行遍歷,但時(shí)間效率要比for 循環(huán)低,從代碼簡潔上看,推薦使用forEach,如果在有條件的情況下進(jìn)行遍歷時(shí),推薦使用some 和 every 進(jìn)行遍歷,會(huì)在滿足具體條件后停下,節(jié)約不必要的循環(huán)
[1,2,3].forEach(function(value, index, array) { cosole.log(value); }); // output // 1 // 2 // 3
對應(yīng)的在jQUery 中也實(shí)現(xiàn)了相同功能的遍歷方法 $.each(),對選中的數(shù)組或者對象進(jìn)行遍歷,這里還有$().each() 在dom 操作中使用較多,表示對子元素集合進(jìn)行遍歷。詳細(xì)解釋
$.each([1,2,3],function(){ console.log(this); } // output 1 2 3 // 對象進(jìn)行遍歷 $.each({a:1,b:2,c:3},function(key,val){ console.log(obj[key]) }) // output 1 2 3map
對舊數(shù)組進(jìn)行"映射",同時(shí)生成對應(yīng)的新數(shù)組,用法簡單,不改變原來的舊數(shù)組
var data = [1, 2, 3, 4]; var arrayOfSquares = data.map(function (item) { return item * item; });
最后返回的新的數(shù)組arrarOfSquares [1,4,9,16]
filter數(shù)組過濾方法,返回判斷條件為true 的數(shù)組項(xiàng)形成的數(shù)組,不改變原數(shù)組
var arrayFilter = [1,2,3,4,5].filter(function(item,index){ rerutn item>3; }) console.log(arrayFilter); // output [4,5]some
數(shù)組中的判斷方法,更邏輯運(yùn)算中的或操作非常相似,|| ,只要數(shù)組中有任何一項(xiàng)滿足條件,就返回true,并且停止后面的遍歷.所以some方法在實(shí)際使用中也可以計(jì)較準(zhǔn)確的找到指定數(shù)組項(xiàng)的同時(shí),得到相應(yīng)的下標(biāo),更indexOf 方法有一些類似
[1,2,3,4,5].some(function(item,index){ console.log(index); return item<3; }) // output 0;
數(shù)組在遍歷的過程中,在第一個(gè)數(shù)組項(xiàng)處就停止循環(huán)了,并且整個(gè)數(shù)組返回 true
find找到符合條件的第一個(gè)數(shù)組元素,與filter 類,如果沒有找到任何一個(gè)就返回undefined
var inventory = [ {name: "apples", quantity: 2}, {name: "bananas", quantity: 0}, {name: "cherries", quantity: 5} ]; function findCherries(fruit) { return fruit.name === "cherries"; } console.log(inventory.find(findCherries)); // { name: "cherries", quantity: 5 }every
與some方法相反的效果,只有數(shù)組中所有的項(xiàng)全都滿足條件,就會(huì)返回true,與邏輯運(yùn)算中的與,&& 操作類似
if([1,2,3,4,5].every(functionI(item,index){ console.log(index); return item<3; }) // output 0,1,2;
在帶條件的遍歷中,every 使用頻率比較高。既可以得到滿足條件的數(shù)組項(xiàng),也可以判斷數(shù)組項(xiàng)中所有的值情況。
indexOf查找匹配的項(xiàng), 返回匹配的索引值,如果沒有匹配,則返回-1,在搭配邏輯運(yùn)算中非運(yùn)算時(shí) ~ ,有意想不到的效果
~ value 值, 當(dāng)value = -1 的時(shí)候,得到的才是0; false 其他任何值的時(shí)候,等到的是非0, true
if(!~[1,2,3,4,5].indexOf(1)){ cnosole.log() }
對于上面這種情況,在數(shù)組中沒有滿足條件的數(shù)組項(xiàng)時(shí),才會(huì)返回true,如果有滿足條件的數(shù)組項(xiàng),就會(huì)返回false,對于處理一些特定的業(yè)務(wù)邏輯有非常奇妙的效果
lastIndexOf從后往前找,返回匹配項(xiàng)的索引值,如果沒有匹配的話,就返回 -1,
reduce遞歸遍歷
var sum = [1,2,3,4].reduce(function(previous,current,index,array){ return previous + current; }); console.log(sum); // output 10;
默認(rèn)是從 第一個(gè)元素開始遍歷,
reduceRight從后往前進(jìn)行遞歸遍歷
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/88783.html
摘要:的的區(qū)別和相同之處就是數(shù)組的遍歷循環(huán),回調(diào)支持三個(gè)參數(shù),第個(gè)是遍歷的數(shù)組內(nèi)容第個(gè)是對應(yīng)的數(shù)組索引,第個(gè)是數(shù)組本身他是沒有返回值得,不需要再下面,更進(jìn)一步,除了接受一個(gè)必須的回調(diào)函數(shù)參數(shù),還可以接受一個(gè)可選的上下文參數(shù)改變回調(diào)函數(shù)里面 Array的forEach、map的區(qū)別和相同之處 forEach 1、 forEach就是數(shù)組的遍歷、循環(huán) ,回調(diào)支持三個(gè)參數(shù),第1個(gè)是遍歷的數(shù)組內(nèi)容;...
摘要:需要返回值,如果不給,默認(rèn)返回使用場景假定有一個(gè)數(shù)值數(shù)組將數(shù)組中的值以雙倍的形式放到數(shù)組寫法方法使用場景假定有一個(gè)對象數(shù)組將數(shù)中對象某個(gè)屬性的值存儲(chǔ)到數(shù)組中三從數(shù)組中找出所有符合指定條件的元素檢測數(shù)值元素,并返回符合條件所有元素的數(shù)組。 showImg(https://segmentfault.com/img/remote/1460000016810336?w=1149&h=524);...
摘要:需要返回值,如果不給,默認(rèn)返回使用場景假定有一個(gè)數(shù)值數(shù)組將數(shù)組中的值以雙倍的形式放到數(shù)組寫法方法使用場景假定有一個(gè)對象數(shù)組將數(shù)中對象某個(gè)屬性的值存儲(chǔ)到數(shù)組中三從數(shù)組中找出所有符合指定條件的元素檢測數(shù)值元素,并返回符合條件所有元素的數(shù)組。 showImg(https://segmentfault.com/img/remote/1460000016810336?w=1149&h=524);...
摘要:需要返回值,如果不給,默認(rèn)返回使用場景假定有一個(gè)數(shù)值數(shù)組將數(shù)組中的值以雙倍的形式放到數(shù)組寫法方法使用場景假定有一個(gè)對象數(shù)組將數(shù)中對象某個(gè)屬性的值存儲(chǔ)到數(shù)組中三從數(shù)組中找出所有符合指定條件的元素檢測數(shù)值元素,并返回符合條件所有元素的數(shù)組。 showImg(https://segmentfault.com/img/remote/1460000016810336?w=1149&h=524);...
閱讀 2049·2023-04-25 15:24
閱讀 1586·2019-08-30 12:55
閱讀 1624·2019-08-29 15:27
閱讀 478·2019-08-26 17:04
閱讀 2416·2019-08-26 10:59
閱讀 1811·2019-08-26 10:44
閱讀 2207·2019-08-22 16:15
閱讀 2597·2019-08-22 15:36