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方法:
1 [1, 4, -5, 10].find((n) => n < 0) // -5
find方法比较好理解,这里的参数n代表数组里的每一项,然后find方法内部通过遍历数组里的每一项,找到<0的这一项( - 5 )。
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了。
这4个方法内部机制都有一个遍历过程,比起forEach确实简洁多了。
接着补充ES6-some( ) 和 every( )方法的讲解:
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