map方法:能夠簡單的理解爲映射數組
1 var arr=[1,2,3,4]; 2 console.log( arr.map((n)=>n*n) );//[1, 4, 9, 16] 3 console.log( arr.map((n)=>n-1) );//[0, 1, 2, 3]
從數組[1,4,-5,10]當中給我找出小於0的數字。在你看到這裏的時候相信你也是對箭頭函數了解,(n)=>n*n 就不用贅述了。函數
filter方法:學習
1 var users = [ 2 {name: "張含韻", "email": "zhang@email.com"}, 3 {name: "江一燕", "email": "jiang@email.com"}, 4 {name: "李小璐", "email": "li@email.com"} 5 ]; 6 //獲取全部人的email 7 var emails=users.map(user=>user.email) 8 console.log(emails.join(',')) //"zhang@email.com", "jiang@email.com", "li@email.com" 9 //獲取指定人的email 10 var liEmail=emails.filter(email=>/^li/.test(email)) 11 console.log(liEmail.join('')) //li@email.com
獲取用戶列表裏的全部用戶的email,map幫咱們作到了,map方法經過傳一個形參,這個形參就表明users裏的每一項,map內部經過遍歷全部的用戶項,獲取到每一個用戶項的email,再push到一個數組,再做爲值給咱們返回。第二步,咱們須要獲取指定人的email,filter方法登場了,經過過濾篩選email是數組,給咱們返回結果,篩選方法得咱們定,這裏篩選方法是以正則匹配到li開頭的那一個email,而後返回。測試
find方法:this
1 [1, 4, -5, 10].find((n) => n < 0) // -5
find方法比較好理解,這裏的參數n表明數組裏的每一項,而後find方法內部經過遍歷數組裏的每一項,找到<0的這一項( - 5 )。spa
findIndex方法:find方法的回調函數能夠接受三個參數,依次爲當前的值、當前的位置和原數組。看一個例子:翻譯
1 [1, 4, -5, 10].findIndex((value,index,arr) => value < 0) // 2
在這個例子當中,value表明這個數組的每一項,1,4,-5,10。index表明每一項的索引值,arr表明這個數組[1, 4, -5, 10],而後咱們須要返回的是<0的這一項的索引值,便是2了。code
這4個方法內部機制都有一個遍歷過程,比起forEach確實簡潔多了。對象
接着補充ES6-some( ) 和 every( )方法的講解: blog
1 //every() 2 let numbers = [2, 4, 10, 4, 8]; 3 let a = numbers.every((item,index)=>{ 4 if(item%2===0){ 5 return true; 6 }else{ 7 return false; 8 } 9 }); 10 console.log(a) 11 12 //some() 13 let b=numbers.some((item,index)=>{ 14 if(item%3===0){ 15 return true; 16 }else{ 17 return false; 18 } 19 }) 20 console.log(b)
some 英語翻譯爲一些,every翻譯爲全部,每一個,因此some方法 只要其中一個爲true 就會返回true的,相反,every()方法必須全部都返回true纔會返回true,哪怕有一個false,就會返回false;every()和 some()目的:肯定數組的全部成員是否知足指定的測試。具體請參考MDNhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some
總結一下:
後續補充:最近看不少小夥伴都在學習ES6,好比ES6中的map,在ES5中是怎麼實現的呢?
1 /* 2 * MAP對象,實現MAP功能 3 * 4 * 接口: 5 * size() 獲取MAP元素個數 6 * isEmpty() 判斷MAP是否爲空 7 * clear() 刪除MAP全部元素 8 * put(key, value) 向MAP中增長元素(key, value) 9 * remove(key) 刪除指定KEY的元素,成功返回True,失敗返回False 10 * get(key) 獲取指定KEY的元素值VALUE,失敗返回NULL 11 * element(index) 獲取指定索引的元素(使用element.key,element.value獲取KEY和VALUE),失敗返回NULL 12 * containsKey(key) 判斷MAP中是否含有指定KEY的元素 13 * containsValue(value) 判斷MAP中是否含有指定VALUE的元素 14 * values() 獲取MAP中全部VALUE的數組(ARRAY) 15 * keys() 獲取MAP中全部KEY的數組(ARRAY) 16 * 17 * 例子: 18 * var map = new Map(); 19 * 20 * map.put("key", "value"); 21 * var val = map.get("key") 22 * …… 23 * 24 */ 25 function Map() { 26 this.elements = new Array(); 27 28 //獲取MAP元素個數 29 this.size = function() { 30 return this.elements.length; 31 }; 32 33 //判斷MAP是否爲空 34 this.isEmpty = function() { 35 return (this.elements.length < 1); 36 }; 37 38 //刪除MAP全部元素 39 this.clear = function() { 40 this.elements = new Array(); 41 }; 42 43 //向MAP中增長元素(key, value) 44 this.put = function(_key, _value) { 45 this.elements.push( { 46 key : _key, 47 value : _value 48 }); 49 }; 50 51 //刪除指定KEY的元素,成功返回True,失敗返回False 52 this.removeByKey = function(_key) { 53 var bln = false; 54 try { 55 for (i = 0; i < this.elements.length; i++) { 56 if (this.elements[i].key == _key) { 57 this.elements.splice(i, 1); 58 return true; 59 } 60 } 61 } catch (e) { 62 bln = false; 63 } 64 return bln; 65 }; 66 //刪除指定KEY的全部元素 67 this.removeAllByKey=function(_key){ 68 for (var i = this.elements.length - 1; i >= 0; i--) { 69 if (this.elements[i].key == _key) { 70 this.elements.splice(i, 1); 71 } 72 } 73 } 74 75 //刪除指定VALUE的元素,成功返回True,失敗返回False 76 this.removeByValue = function(_value) {//removeByValueAndKey 77 var bln = false; 78 try { 79 for (i = 0; i < this.elements.length; i++) { 80 if (this.elements[i].value == _value) { 81 this.elements.splice(i, 1); 82 return true; 83 } 84 } 85 } catch (e) { 86 bln = false; 87 } 88 return bln; 89 }; 90 91 //刪除指定VALUE的元素,成功返回True,失敗返回False 92 this.removeByValueAndKey = function(_key,_value) { 93 var bln = false; 94 try { 95 for (i = 0; i < this.elements.length; i++) { 96 if (this.elements[i].value == _value && this.elements[i].key == _key) { 97 this.elements.splice(i, 1); 98 return true; 99 } 100 } 101 } catch (e) { 102 bln = false; 103 } 104 return bln; 105 }; 106 107 //獲取指定KEY的全部元素值VALUE,以數組形式返回,失敗返回false 108 this.get = function(_key) { 109 var arr=[]; 110 try { 111 for (i = 0; i < this.elements.length; i++) { 112 if (this.elements[i].key == _key) { 113 arr.push(this.elements[i].value) 114 } 115 } 116 return arr; 117 } catch (e) { 118 return false; 119 } 120 return false; 121 }; 122 123 //獲取指定索引的元素(使用element.key,element.value獲取KEY和VALUE),失敗返回NULL 124 this.element = function(_index) { 125 if (_index < 0 || _index >= this.elements.length) { 126 return null; 127 } 128 return this.elements[_index]; 129 }; 130 131 //判斷MAP中是否含有指定KEY的元素 132 this.containsKey = function(_key) { 133 var bln = false; 134 try { 135 for (i = 0; i < this.elements.length; i++) { 136 if (this.elements[i].key == _key) { 137 bln = true; 138 } 139 } 140 } catch (e) { 141 bln = false; 142 } 143 return bln; 144 }; 145 146 //判斷MAP中是否含有指定VALUE的元素 147 this.containsValue = function(_value) { 148 var bln = false; 149 try { 150 for (i = 0; i < this.elements.length; i++) { 151 if (this.elements[i].value == _value) { 152 bln = true; 153 } 154 } 155 } catch (e) { 156 bln = false; 157 } 158 return bln; 159 }; 160 161 //判斷MAP中是否含有指定key,VALUE的元素 162 this.containsObj = function(_key,_value) { 163 var bln = false; 164 try { 165 for (i = 0; i < this.elements.length; i++) { 166 if (this.elements[i].value == _value && this.elements[i].key == _key) { 167 bln = true; 168 } 169 } 170 } catch (e) { 171 bln = false; 172 } 173 return bln; 174 }; 175 176 //獲取MAP中全部VALUE的數組(ARRAY) 177 this.values = function() { 178 var arr = new Array(); 179 for (i = 0; i < this.elements.length; i++) { 180 arr.push(this.elements[i].value); 181 } 182 return arr; 183 }; 184 //獲取MAP中全部指定VALUE的元素數組(ARRAY) 185 this.getAllByValue=function(_value){ 186 var arr=[]; 187 for (var i = this.elements.length - 1; i >= 0; i--) { 188 if (this.elements[i].value == _value) { 189 arr.push(this.elements[i]); 190 } 191 } 192 return arr; 193 } 194 195 //獲取MAP中指定key的全部VALUE的數組(ARRAY) 196 this.valuesByKey = function(_key) { 197 var arr = new Array(); 198 for (i = 0; i < this.elements.length; i++) { 199 if (this.elements[i].key == _key) { 200 arr.push(this.elements[i].value); 201 } 202 } 203 return arr; 204 }; 205 206 //獲取MAP中全部KEY的數組(ARRAY) 207 this.keys = function() { 208 var arr = new Array(); 209 for (i = 0; i < this.elements.length; i++) { 210 arr.push(this.elements[i].key); 211 } 212 return arr; 213 }; 214 215 //獲取key經過value 216 this.keysByValue = function(_value) { 217 var arr = new Array(); 218 for (i = 0; i < this.elements.length; i++) { 219 if(_value == this.elements[i].value){ 220 arr.push(this.elements[i].key); 221 } 222 } 223 return arr; 224 }; 225 226 //獲取MAP中全部KEY的數組(ARRAY)key有相同的 取出的key爲去重後的 數組裏去重後的key的數組 227 this.keysRemoveDuplicate = function() { 228 var arr = new Array(); 229 for (i = 0; i < this.elements.length; i++) { 230 var flag = true; 231 for(var j=0;j<arr.length;j++){ 232 if(arr[j] == this.elements[i].key){ 233 flag = false; 234 break; 235 } 236 } 237 if(flag){ 238 arr.push(this.elements[i].key); 239 } 240 } 241 return arr; 242 }; 243 }
若是你須要兼容IE,用這個ES5寫的map應該沒有問題,明白了ES5怎麼實現ES6中的map,天然也就懂了,後續貨繼續更新ES6其餘知識點,雖然我也很菜,如發現有BUG的小夥伴,必定記得給我留言,萬分感激。
後續補充:
傳統寫法和ES6寫法對比:
1 var users = [ 2 {name: "張含韻", "email": "zhang@email.com"}, 3 {name: "江一燕", "email": "jiang@email.com"}, 4 {name: "李小璐", "email": "li@email.com"} 5 ]; 6 7 function valuesByKey(_key) { 8 //定義個空數組 9 var arr = []; 10 //循環遍歷users數組 11 for (i = 0; i < users.length; i++) { 12 //只要是key值等於_key的,對應的值都push進arr 13 arr.push(users[i][_key]); 14 } 15 //返回arr 16 return arr; 17 } 18 19 var arr=users.map((user)=>user.name); 20 console.log(arr)//["張含韻", "江一燕", "李小璐"] 21 console.log(valuesByKey('name')) //["張含韻", "江一燕", "李小璐"]
js數組方法能夠看我博客整理的數組相關:http://moxiaofei.com/2018/07/02/js-array/