别动手动脚的,把手拿开!
我是在地球上成长的赛亚人!

    常用的各种遍历

  js遍历

Posted by CC on February 15, 2017

常用的遍历

数组遍历 var a = [5, 2, 3];

for (value of a) { console.log(value) //5,2,3返回的是值 } for..of遍历内部的机制用到了迭代器

a.forEach(function(value,key, arr) { console.log(value,key,arr) // 返回的结果 5 0 [ 5, 2, 3 ] 2 1 [ 5, 2, 3 ] 3 2 [ 5, 2, 3 ] }) 如果是在回调中使用forEach(),可以给forEach()加上一个this参数 btn.onclick=function(){ a.forEach(function(value,key, arr) { console.log(value,key,arr) // 返回的结果 5 0 [ 5, 2, 3 ] 2 1 [ 5, 2, 3 ] 3 2 [ 5, 2, 3 ] },this) }

对象遍历 var obj = { “name”: “tom”, “age”: 22, “job”: “it” }; for (key in obj) { console.log(key); } Object.getOwnPropertyNames()方法返回一个由指定对象的所有自身属性的属性名组成的数组,包括不可枚举属性但不包括Symbol值作为名称的属性 Object.keys(obj)返回一个给定对象的自身可枚举属性组成的数组,不可枚举的,不会被遍历。 for…in还会遍历原型链上的属性,返回的是每个属性key,不可枚举的,不会被遍历。

  1. […].some(ck)函数 —- 某个一个为true,则为true

对数组中每个元素执行一次ck函数,知道某个元素返回true,则直接返回true。如果都返回false,则返回false

检查整个数组中是否有满足ck函数的元素。

var result = [1,5,3,6].some( (v,i) => (v>10) ) //所有元素都不满足,返回result = false var result = [10,5,30,60].some( (v,i) => (v<10) ) //有一个(多个)满足,返回result = true —

2.[…].foreach(ck)函数 —- 循环而已

每个数组元素都执行一次ck函数,foreach函数无法用break跳出

[50, 25, 49].forEach( (v,i) => console.log(v) ); //50 25 49 —

3.[…].map(ck)函数 —- 返回每个元素返回值的集合

每个数组元素都执行一次ck函数,最后返回每次元素执行ck函数后返回值的集合(数组)

var newArray = [50,30,40].map( (v,i) => v/10 ) //每个元素除以10,最后返回一个新数组 newArray = [5,3,4] —

4.[…].filter(ck)函数 —- 得到返回值为true的元素的集合

每个数组元素都执行一次ck函数,最后返回每次元素执行ck函数后返回值的为true的元素集合(数组)

var newArray = [50,2,60,4,53,15].filter( (v,i) => (v>10) ) //返回数组中大于10的元素新数组 newArray = [50,60,53,15] —

5.[…].every(ck)函数 —- 某一个为false,则返回false

每个数组元素都执行一次ck函数,直到某个元素执行函数ck返回false,则直接返回false,如果全部返回true,则返回true

var result = [5,50,35,12,85].every( (v,i) => v<51 ) //返回有一个(多个)大于等于51,则返回 result = false var result = [5,50,35,12,85].every( (v,i) => v<100 ) //全部大于51,则返回 result = true —

6.[…].reduce(ck,init) —- 依次执行ck(prv.next)

数组依次执行ck函数。

var result = [0,1,2,3] restult.reduce((a,b)=> a+b,0) // 返回 6 —

操作数组的方法(pop push unshift shift splice reverse sort)indexOf lastIndexof concat slice forEach filter map some every reduce includes find

# forEach  不支持return  声明式 不关心如何实现

for in key会变成字符串类型 包括数组的私有属性  对象原型链上的属性也会打印出来

for of 支持return 并且是值of 数组 有iterator的 不能直接遍历对象

以下几个需要注意 是否操作原数组  返回结果 回调函数的返回结果 如果返回true 代表这一项放到数组中


[1,2,3,4,5].filter(item=>item>2&&item<4)

map  映射 讲原有数组映射成一个新数组 [1,2,3]=><li>1</li><li>2</li><li>3</li> 不操作原数组 返回新数组 回调函数中返回什么这一项就是什么


[1,2,3,4,5].map(item=><li>${item}</li>).join(‘’)//”<li>1</li><li>2</li><li>3</li><li>4</li><li>5</li>”

includes arr.includes(item) 返回的是boolean

find 返回找到的那一项 不会改变数组 回调函数中返回true表示找到了 找到后停止循环


arr.find((item,index)=>item.toString().indexOf(具体要找的东西)>-1)//找到具体的某一项用find —

some 找true 找到true后停止 返回true

every 找false找到false后停止 返回false

reduce 收敛函数 收敛4个参数 返回的是叠加后的结果 原数组不发生变化 回调函数返回的结果


[1,2,3,4,5].reduce((prev,next,index,item)=>prev+next) return的本次 返回值 会作为下一次的prev // prev 代表的是数组的第一项 next是数组的第二项 —

reduce回调第一个参数是函数 第二个可以是0 用来默认指定第一次的prev