js遍历数组有多少种方法

Posted rainbowLover

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js遍历数组有多少种方法相关的知识,希望对你有一定的参考价值。

如果你看完了你会体会到一个人能有多无聊,这东西都能看完!!??

 

大概js有以下几种循环遍历的方法:

  1 let arr = [‘aaa‘,‘bbb‘,‘ccc‘]
  2 let obj = {a:‘aaa‘,b:‘bbb‘,c:‘ccc‘}
  3 let deepObj = {a:‘aaa‘, b:{c:‘ccc‘}}
  4 
  5 // foriFn(arr);// 经典for循环 
  6       // index :>>  0
  7       // item :>>  aaa
  8       // index :>>  1
  9       // item :>>  bbb
 10       // index :>>  2
 11       // item :>>  ccc
 12 
 13 // foriFnPlus(arr);// 经典for循环稍微优化一下子
 14       // index :>>  0
 15       // item :>>  aaa
 16       // index :>>  1
 17       // item :>>  bbb
 18       // index :>>  2
 19       // item :>>  ccc
 20 
 21 // forEachFn(arr);// forEach遍历数组 return不会终止循环,return相当于for循环里的continue
 22       // index :>>  0
 23       // item :>>  aaa
 24       // index :>>  1
 25       // item :>>  bbb
 26       // index :>>  2
 27       // item :>>  ccc
 28 
 29 // forinFn(arr)// forin循环 循环时候得到的key时字符串类型的
 30       // index :>>  0
 31       // typeof index :>>  string
 32       // item :>>  aaa
 33       // index :>>  1
 34       // typeof index :>>  string
 35       // item :>>  bbb
 36       // index :>>  2
 37       // typeof index :>>  string
 38       // item :>>  ccc
 39 // forinFn(obj)//forin循环 可以遍历对象
 40       // index :>>  a
 41       // typeof index :>>  string
 42       // item :>>  aaa
 43       // index :>>  b
 44       // typeof index :>>  string
 45       // item :>>  bbb
 46       // index :>>  c
 47       // typeof index :>>  string
 48       // item :>>  ccc
 49 // forinFn(deepObj)//forin循环 可以遍历对象 只遍历一层 
 50       // index :>>  a
 51       // typeof index :>>  string
 52       // item :>>  aaa
 53       // index :>>  b
 54       // typeof index :>>  string
 55       // item :>>  { c: ‘ccc‘ }
 56 
 57 // forofFn(arr)// forof循环 循环时候没有index
 58       // index :>>  0
 59       // item :>>  aaa
 60       // index :>>  1
 61       // item :>>  bbb
 62       // index :>>  2
 63       // item :>>  ccc
 64 
 65 // doWhileFn(arr)// do While循环
 66       // item :>>  aaa
 67       // item :>>  bbb
 68       // item :>>  ccc
 69 // whiledoFn(arr)// while do循环
 70       // item :>>  aaa
 71       // item :>>  bbb
 72       // item :>>  ccc
 73 
 74 // mapFn(arr)// map循环 return不会终止循环,return相当于for循环里的continue
 75       // index :>>  0
 76       // item :>>  aaa
 77       // 0
 78       // index :>>  1
 79       // item :>>  bbb
 80       // index :>>  2
 81       // item :>>  ccc
 82       
 83 // filterFn(arr)// filter循环 return不会终止循环,return相当于for循环里的continue
 84       // index :>>  0
 85       // item :>>  aaa
 86       // 0
 87       // index :>>  1
 88       // item :>>  bbb
 89       // index :>>  2
 90       // item :>>  ccc
 91 
 92 
 93 // reduceFn(arr)// reduce方法 特殊应用场景使用 和上边的循环不一样
 94       // i :>>  aaa
 95       // j :>>  bbb
 96       // i :>>  aaabbb
 97       // j :>>  ccc
 98       // res :>>  aaabbbccc
 99 
100 // entriesFn(arr)// 遍历器entries循环
101       // Array.isArray(val) :>>  true
102       // val :>>  [ 0, ‘aaa‘ ]
103       // index :>>  0
104       // item :>>  aaa
105       // val :>>  [ 1, ‘bbb‘ ]
106       // index :>>  1
107       // item :>>  bbb
108       // val :>>  [ 2, ‘ccc‘ ]
109       // index :>>  2
110       // item :>>  ccc
111 // entriesFnPlus(arr)// 遍历器entries循环优化
112       // Array.isArray(val) :>>  true
113       // val :>>  [ 0, ‘aaa‘ ]
114       // index :>>  0
115       // item :>>  aaa
116       // Array.isArray(val) :>>  true
117       // val :>>  [ 1, ‘bbb‘ ]
118       // index :>>  1
119       // item :>>  bbb
120       // Array.isArray(val) :>>  true
121       // val :>>  [ 2, ‘ccc‘ ]
122       // index :>>  2
123       // item :>>  ccc
124 
125 // keysValuesFn(arr)// 用数组的 arr.keys() arr.values() 方法遍历
126       // index :>>  0
127       // index :>>  1
128       // index :>>  2
129       // item :>>  aaa
130       // item :>>  bbb
131       // item :>>  ccc
132 
133 // ObjectKeysValuesFn(arr)//  用对象的 Object.keys(arr)、Object.values(arr)方法返回的字符串数组 遍历
134       // index :>>  0
135       // index :>>  1
136       // index :>>  2
137       // item :>>  aaa
138       // item :>>  bbb
139       // item :>>  ccc
140 // ObjectKeysValuesFn(obj)// 可以遍历对象
141       // index :>>  a
142       // index :>>  b
143       // index :>>  c
144       // item :>>  aaa
145       // item :>>  bbb
146       // item :>>  ccc
147 // ObjectKeysValuesFn(deepObj)// 可以遍历对象 只遍历一层
148       // index :>>  a
149       // index :>>  b
150       // item :>>  aaa
151       // item :>>  { c: ‘ccc‘ }
152 
153 /**
154  * 经典for循环 据说性能最高
155  * @param {Array} arr 
156  */
157 function foriFn(arr){
158   for(let i=0; i<arr.length; i++){
159     console.log(‘index :>> ‘, i);
160     console.log(‘item :>> ‘, arr[i]);
161   }
162 }
163 
164 /**
165  * 经典for循环 优化
166  * 将数组的length缓存起来避免每次都取获取数组的length
167  * @param {Array} arr 
168  */
169 function foriFnPlus(arr){
170   for(let i=0,len=arr.length; i<len; i++){
171     console.log(‘index :>> ‘, i);
172     console.log(‘item :>> ‘, arr[i]);
173   }
174 }
175 
176 /**
177  * forEach遍历数组
178  * return不会终止循环,return相当于for循环里的continue
179  * @param {Array} arr 
180  */
181 function forEachFn(arr){
182   arr.forEach((item,index,a)=>{
183     console.log(‘index :>> ‘, index);
184     console.log(‘item :>> ‘, item);
185     if(index){
186       return;
187     }
188   })
189 }
190 
191 /**
192  * forin循环
193  * 可以循环数组可以循环对象
194  * @param {Object,Array} arr 
195  */
196 function forinFn(arr){
197   for (const idx in arr) {
198     if (arr.hasOwnProperty(idx)) {
199       const item = arr[idx];
200       console.log(‘index :>> ‘, idx);
201       console.log(‘typeof index :>> ‘, typeof idx);
202       console.log(‘item :>> ‘, item);
203     }
204   }
205 }
206 
207 /**
208  * forOf循环
209  * 没给你传index
210  * @param {Array} arr 
211  */
212 function forofFn(arr){
213   for (const item of arr) {
214     console.log(‘index :>> ‘, arr.indexOf(item));
215     console.log(‘item :>> ‘, item);
216   }
217 }
218 
219 /**
220  * do while循环
221  * @param {Array} arr 
222  */
223 function doWhileFn(arr){
224   do{
225     console.log(‘item :>> ‘, arr.shift());
226   }while(arr.length>0)
227 }
228 
229 /**
230  * while do 循环
231  * @param {Array} arr 
232  */
233 function whiledoFn(arr) {
234   while (arr.length>0) {
235     console.log(‘item :>> ‘, arr.shift());
236   }
237 }
238 
239 /**
240  * map循环
241  * return不会终止循环,return相当于for循环里的continue
242  * @param {Array} arr 
243  */
244 function mapFn(arr){
245   arr.map((v,i,a)=>{
246     console.log(‘index :>> ‘, i);
247     console.log(‘item :>> ‘, v);
248     if(i){
249       return
250     }
251     console.log(i);
252   })
253 }
254 
255 /*
256  * filter循环
257  * return不会终止循环,return相当于for循环里的continue
258  * @param {Array} arr 
259  */
260 function filterFn(arr){
261   arr.filter((v,i,a)=>{
262     console.log(‘index :>> ‘, i);
263     console.log(‘item :>> ‘, v);
264     if(i){
265       return
266     }
267     console.log(i);
268   })
269 }
270 
271 /**
272  * reduce循环
273  * @param {Array} arr 
274  */
275 function reduceFn(arr){
276   let res = arr.reduce((i,j)=>{
277     console.log(‘i :>> ‘, i);
278     console.log(‘j :>> ‘, j);
279     return i+j
280   })
281   console.log(‘res :>> ‘, res);
282 }
283 
284 /**
285  * 遍历器循环
286  * @param {Array} arr 
287  */
288 function entriesFn(arr){
289   let ets = arr.entries()
290   
291   let val = ets.next().value
292   console.log(‘Array.isArray(val) :>> ‘, Array.isArray(val));
293   console.log(‘val :>> ‘, val);
294   console.log(‘index :>> ‘, val[0]);
295   console.log(‘item :>> ‘, val[1]);
296 
297   val = ets.next().value
298   console.log(‘val :>> ‘, val);
299   console.log(‘index :>> ‘, val[0]);
300   console.log(‘item :>> ‘, val[1]);
301 
302   val = ets.next().value
303   console.log(‘val :>> ‘, val);
304   console.log(‘index :>> ‘, val[0]);
305   console.log(‘item :>> ‘, val[1]);
306 }
307 
308 /**
309  * 遍历器循环简化版
310  * @param {Array} arr 
311  */
312 function entriesFnPlus(arr){
313   let ets = arr.entries()
314   let nxt=ets.next(),val
315   while(!nxt.done){
316     val = nxt.value
317     console.log(‘Array.isArray(val) :>> ‘, Array.isArray(val));
318     console.log(‘val :>> ‘, val);
319     console.log(‘index :>> ‘, val[0]);
320     console.log(‘item :>> ‘, val[1]);
321     nxt = ets.next()
322   }
323 }
324 
325 /**
326  * 利用数组keys values属性的循环
327  * @param {Array} arr 
328  */
329 function keysValuesFn(arr){
330   for (const index of arr.keys()) {
331     console.log(‘index :>> ‘, index);
332   }
333   for (const item of arr.values()) {
334     console.log(‘item :>> ‘, item);
335   }
336 }
337 
338 /**
339  * 利用对象keys values属性的循环
340  * @param {Object} arr 
341  */
342 function ObjectKeysValuesFn(arr){
343   for (const index of Object.keys(arr)) {
344     console.log(‘index :>> ‘, index);
345   }
346   for (const item of Object.values(arr)) {
347     console.log(‘item :>> ‘, item);
348   }
349 }

 

over

 

以上是关于js遍历数组有多少种方法的主要内容,如果未能解决你的问题,请参考以下文章

js数组遍历方法总结

JS几种数组遍历方式总结

js 数组循环的几种方法及返回值

js 循环遍历变量的几种方式

JS数组循环遍历常用的9种方法

js数组去重的几种方法