摘要:場(chǎng)景檢查數(shù)組中是否含有某個(gè)東西和是對(duì)立的案例案例是否包含為對(duì)象循環(huán)遍歷效率對(duì)比參考參考原生實(shí)現(xiàn)等方法其他參考
1 遍歷數(shù)組的方法
1-1、for / while
最普通的循環(huán) 效率最高 兼容ie6
tips:for循環(huán)更適用于循環(huán)的開始和結(jié)束已知,循環(huán)次數(shù)固定的場(chǎng)合;while循環(huán)更適合于條件不確定的場(chǎng)合
1-2、for in
兼容ie6,效率最差(效率可看最下面的對(duì)比) for in 會(huì)把繼承鏈的對(duì)象屬性都會(huì)遍歷一遍,所以會(huì)更花時(shí)間.
var arr = ["red", "green", "blue"]; var obj = { name:"張三", age:20 } for(k in obj){ console.log(k); //name , age console.log(obj[k]); // 張三 , 20 } for(k in arr){ console.log(k); // 0 , 1 ,2 console.log(arr[k]); // red, green ,blue }
1-3、for of ?es6語(yǔ)法
ie不兼容 ?【for-of 語(yǔ)句只遍歷可迭代對(duì)象的數(shù)據(jù)?!吭邆?Iterator 接口的數(shù)據(jù)結(jié)構(gòu)如下。ArrayMapSetStringTypedArray函數(shù)的 arguments 對(duì)象NodeList 對(duì)象更多迭代器 閱讀:http://es6.ruanyifeng.com/#do...
var arr = ["red", "green", "blue"]; for(var v of arr) { console.log(v); // red green blue }
區(qū)別:for of 和 for in的區(qū)別for-in 語(yǔ)句以原始插入順序迭代對(duì)象的可枚舉屬性。for-in會(huì)把繼承鏈的對(duì)象屬性都會(huì)遍歷一遍,所以會(huì)更花時(shí)間.
2、數(shù)組自帶的循環(huán)方法:every 、 filter、forEach、map、reduce、some 都是兼容ie9
map,filter 是返回新的數(shù)組 (形象區(qū)分幾個(gè)循環(huán)方法的區(qū)別參考:https://www.zhihu.com/questio...)
2-1、Array.prototype.every()
方法說明:測(cè)試數(shù)組的所有元素是否都通過了指定函數(shù)的測(cè)試。 遇到有不滿足的會(huì)提前終止整個(gè)循環(huán)
場(chǎng)景:檢測(cè)每一項(xiàng)的selected字段都是被選中為true
案例:
var arr = [ {id:1,name:"zhangsan1",selected:false}, {id:2,name:"zhangsan2",selected:false}, {id:3,name:"zhangsan3",selected:true}, ]; var reslut = arr.every(function(el,index,arr){ console.log(el); return el.selected==true; }); console.log(reslut); //false
2-2、Array.prototype.filter() ?
方法說明: 將所有在過濾函數(shù)中返回 true 的數(shù)組元素放進(jìn)一個(gè)新數(shù)組中并返回。true表示保留該元素(通過測(cè)試),false則不保留
場(chǎng)景:在一個(gè)數(shù)組中篩選數(shù)字大于10的元素,組成一個(gè)新數(shù)組
案例:
var arr = [ 10,20,30 ]; var arr1 = arr.filter(function(el,index,arr){ return el > 10; }); console.log(arr1); // 20 30
2-3、Array.prototype.forEach()
?
方法說明:方法對(duì)數(shù)組的每個(gè)元素執(zhí)行一次提供的函數(shù) ? ?沒有辦法中止或者跳出 forEach 循環(huán),除了拋出一個(gè)異常。 如果您正在測(cè)試一個(gè)數(shù)組里的元素是否符合某條件,且需要返回一個(gè)布爾值,那么可使用 Array.every 或 Array.some。如果可用,新方法 find() 或者findIndex() 也可被用于真值測(cè)試的提早終止。
場(chǎng)景: 普通遍歷
案例:
var arr = [ {id:1,name:"zhangsan1",selected:false}, {id:2,name:"zhangsan2",selected:false}, {id:3,name:"zhangsan3",selected:true}, ]; arr.forEach(function(el,index,arr){ console.log(el) });
2-4、Array.prototype.map()
方法說明:方法創(chuàng)建一個(gè)新數(shù)組,其結(jié)果是該數(shù)組中的每個(gè)元素都調(diào)用一個(gè)提供的函數(shù)后返回的結(jié)果。
場(chǎng)景:異步得到數(shù)據(jù)后,需要新建一個(gè)數(shù)據(jù)根據(jù)id標(biāo)識(shí)記錄是否被選中的selected屬性
案例:
var arr = [ {id:1,name:"zhangsan1"}, ]; var arr1 = arr.map(function(el,index,arr){ var newObj = {}; newObj.id = el.id; newObj.selected = false; return newObj; }); console.log(arr); // [{id:1,name:"zhangsan1"}] console.log(arr1); // [{id:1,selected:false}]
案例2: es6寫法
var numbers = [1, 5, 10, 15]; var doubles = numbers.map( x => x ** 2); //[2,10,20,30]
案例3:重格式化數(shù)組 //不改變?cè)瓟?shù)組
var kvArray = [{key: 1, value: 10}, {key: 2, value: 20}, {key: 3, value: 30}]; var reformattedArray = kvArray.map(function(obj) { var rObj = {}; rObj[obj.key] = obj.value; return rObj; }); // reformattedArray 數(shù)組為: [{1: 10}, {2: 20}, {3: 30}],
2-5、Array.prototype.reduce()
方法說明:方法對(duì)累加器和數(shù)組中的每個(gè)元素(從左到右)應(yīng)用一個(gè)函數(shù),將其減少為單個(gè)值。
場(chǎng)景:累加 、 合并多個(gè)數(shù)組
案例:
var total = [0, 1, 2, 3].reduce(function(sum, value) { return sum + value; }, 0); // total is 6 var flattened = [[0, 1], [2, 3], [4, 5]].reduce(function(a, b) { return a.concat(b); }, []); // flattened is [0, 1, 2, 3, 4, 5]
2-6、Array.prototype.some()
方法說明:方法測(cè)試數(shù)組中的某些元素是否通過由提供的函數(shù)實(shí)現(xiàn)的測(cè)試。
場(chǎng)景:檢查數(shù)組中是否含有某個(gè)東西 (和every 是對(duì)立的)
案例:
const isBiggerThan10 = (element, index, array) => { return element > 10; } [2, 5, 8, 1, 4].some(isBiggerThan10); // false [12, 5, 8, 1, 4].some(isBiggerThan10); // true
案例2: 是否包含id為1 對(duì)象
var arr = [ {id:1,name:"zhangsan1"}, {id:2,name:"zhangsan2"}, ]; var flag = arr.some(function(element, index, array){ console.log(element.id) return element.id == 1; }); console.log(flag)3、 循環(huán)/遍歷效率對(duì)比
for ~= do while < forEach ~= map ~= every < $.each < $(e).each < for in ?
參考:http://www.jb51.net/article/1...
for > for-of > forEach > filter > map > for-in
參考:https://dailc.github.io/2016/...
?http://www.jb51.net/article/6...
5、其他參考https://juejin.im/post/5a3a59...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/101739.html
摘要:循環(huán)方法方法不改變?cè)瓟?shù)組方法會(huì)給原數(shù)組中的每個(gè)元素都按順序調(diào)用一次函數(shù)。篩選出過濾出數(shù)組中符合條件的項(xiàng)組成新數(shù)組代碼方法方法為數(shù)組中的每個(gè)元素執(zhí)行一次函數(shù),直到它找到一個(gè)使返回表示可轉(zhuǎn)換為布爾值的值的元素。 showImg(https://segmentfault.com/img/bV2QTD?w=1600&h=500); 前言 JavaScript 發(fā)展至今已經(jīng)發(fā)展出多種數(shù)組的循環(huán)遍...
摘要:所以結(jié)果的不同就是后者能將循環(huán)內(nèi)容至少執(zhí)行一次。當(dāng)此語(yǔ)句省略時(shí),表示不進(jìn)行條件判斷,循環(huán)將一直執(zhí)行,只有在循環(huán)中使用來(lái)跳出循環(huán)。支持對(duì)數(shù)組和類數(shù)組對(duì)象進(jìn)行循環(huán),不支持普通對(duì)象的循環(huán)。支持對(duì)字符串進(jìn)行循環(huán)遍歷。 JavaScript中直接提供的循環(huán),主要有以下幾種 while 循環(huán) 和其他語(yǔ)言一樣,JavaScript中的while循環(huán)有兩種形式: while (condition) {...
本篇有7k+字, 系統(tǒng)梳理了js中常見的12種排序算法。除了基本排序算法,文章還包含了希爾排序、堆排序、桶排序等較為復(fù)雜的排序?qū)崿F(xiàn),如果喜歡請(qǐng)點(diǎn)贊支持~謝謝. 原文: http://louiszhai.github.io/20... 導(dǎo)讀 排序算法可以稱得上是我的盲點(diǎn), 曾幾何時(shí)當(dāng)我知道Chrome的Array.prototype.sort使用了快速排序時(shí), 我的內(nèi)心是奔潰的(啥是快排, 我只知道...
摘要:知識(shí)體系梳理流程圖一維數(shù)組數(shù)組概述數(shù)組是指一組數(shù)據(jù)的集合,數(shù)組中的每個(gè)數(shù)據(jù)被稱作元素。定義打印數(shù)組元素方法按照給定的格式打印題目分析通過觀察發(fā)現(xiàn),要實(shí)現(xiàn)按照指定格式,打印數(shù)組元素操作。按照這種方式,數(shù)組循環(huán)多圈以后,就完成了數(shù)組元素的排序。 知識(shí)體系梳理流程圖 showImg(https://segmentfault.com/img/bVXwAi?w=902&h=652); 一維數(shù)組 ...
摘要:底層使用的是雙向鏈表數(shù)據(jù)結(jié)構(gòu)之前為循環(huán)鏈表,取消了循環(huán)??焖匐S機(jī)訪問就是通過元素的序號(hào)快速獲取元素對(duì)象對(duì)應(yīng)于方法。而接口就是用來(lái)標(biāo)識(shí)該類支持快速隨機(jī)訪問。僅僅是起標(biāo)識(shí)作用。,中文名為雙端隊(duì)列。不同的是,是線程安全的,內(nèi)部使用了進(jìn)行同步。 前言 學(xué)習(xí)情況記錄 時(shí)間:week 2 SMART子目標(biāo) :Java 容器 記錄在學(xué)習(xí)Java容器 知識(shí)點(diǎn)中,關(guān)于List的需要重點(diǎn)記錄的知識(shí)點(diǎn)。...
閱讀 3939·2021-11-22 09:34
閱讀 1507·2021-11-04 16:10
閱讀 1741·2021-10-11 10:59
閱讀 3287·2019-08-30 15:44
閱讀 2052·2019-08-30 13:17
閱讀 3461·2019-08-30 11:05
閱讀 757·2019-08-29 14:02
閱讀 2633·2019-08-26 13:34