JS遍历总结
2021-05-25 09:35:17 12 举报
AI智能生成
JavaScript遍历主要有三种方式:for循环、forEach方法和map方法。for循环是最基础的遍历方式,通过设置起始值、结束值和步长来控制遍历过程。forEach方法是数组自带的遍历方法,可以直接对数组中的每个元素进行操作。map方法也是数组自带的遍历方法,但它会返回一个新的数组,不会改变原数组。此外,JavaScript还提供了一些其他遍历方法,如some、every、filter等,它们都接受一个回调函数作为参数,用于对数组中的每个元素进行判断或处理。总之,JavaScript提供了丰富的遍历方式,可以根据具体需求选择合适的方法来实现遍历操作。
作者其他创作
大纲/内容
对象遍历
Object.keys()(推荐)
var obj = {'0':'a','1':'b','2':'c'};<br>Object.keys(obj).forEach(function(key){<br> console.log(key,obj[key]);<br>});
返回一个数组,包括对象自身的(不含继承的)所有可枚举属性(不含Symbol属性).
forin(推荐)
var obj = {'0':'a','1':'b','2':'c'};<br><br>for(var i in obj) {<br><br> console.log(i,":",obj[i]);<br><br>}
循环遍历对象自身的和继承的可枚举属性(不含Symbol属性).
Object.getOwnPropertyNames(obj)(推荐)
var obj = {'0':'a','1':'b','2':'c'};<br>Object.getOwnPropertyNames(obj).forEach(function(key){<br><br> console.log(key,obj[key]);<br><br>});
返回一个数组,包含对象自身的所有属性(不含Symbol属性,但是包括不可枚举属性).
Reflect.ownKeys(obj)
var obj = {'0':'a','1':'b','2':'c'};<br>Reflect.ownKeys(obj).forEach(function(key){<br><br>console.log(key,obj[key]);<br><br>});
返回一个数组,包含对象自身的所有属性,不管属性名是Symbol或字符串,也不管是否可枚举.
数组遍历
for(推荐)
for(j = 0,len=arr.length; j < len; j++) {}
当数组较大时优化效果才会比较明显
foreach(推荐)
arr.forEach((item,index,array)=>{}
item数组中的当前项, index当前项的索引, array原始数组
没有返回值
数组中有几项,那么传递进去的匿名回调函数就需要执行几次
map
arr.map(function(value,index,array){}
map的回调函数中支持return返回值;return的是啥,相当于把数组中的这一项变为啥(并不影响原来的数组,只是相当于把原数组克隆一份,把克隆的这一份的数组中的对应项改变了)
forof(推荐)
for (var value of myArray) {<br>console.log(value);<br>}
可以正确响应break、continue和return语句
ES6中,新增了for-of遍历方法。它被设计用来遍历各种类数组集合,例如DOM NodeList对象、Map和Set对象,甚至字符串也行
<br>// for-of遍历数组,不带索引,i即为数组元素<br>for(let i of arrTmp){<br> console.log(i)<br>}<br>//输出 "value1" "value2" "value3"<br> <br>// for-of遍历Map对象<br>let iterable = new Map([["a", 1], ["b", 2], ["c", 3]]);<br>for (let [key, value] of iterable) {<br> console.log(value);<br>}<br>//输出 1 2 3<br> <br>// for-of遍历字符串<br>let iterable = "china中国";<br>for (let value of iterable) {<br> console.log(value);<br>}<br>//输出 "c" "h" "i" "n" "a" "中" "国"<br>
这种方式是es6里面用到的,性能要好于for…in,但仍然比不上普通for循环。<br><br>该种方式通常是直接获取显性的值,而无法直接获取索引。
forin(推荐)
var arr=["张三","李四","王五","赵六"];<br><br>for (var i in arr){<br><br>console.log(i,":",arr[i]);<br><br>}
filter
var arr = [<br> { id: 1, text: 'aa', done: true },<br> { id: 2, text: 'bb', done: false }<br>]<br>console.log(arr.filter(item => item.done))
不会改变原始数组,返回新数组
every
var arr = [ 1, 2, 3, 4, 5, 6 ]; <br>console.log( arr.every( function( item, index, array ){ <br> return item > 3; <br> })); <br>false
every()是对数组中的每一项运行给定函数,如果该函数对每一项返回true,则返回true。
some
var arr = [ 1, 2, 3, 4, 5, 6 ];<br> console.log( arr.some( function( item, index, array ){ <br> return item > 3; <br> })); <br>true
some()是对数组中每一项运行指定函数,如果该函数对任一项返回true,则返回true。
reduce
var total = [0,1,2,3,4].reduce((a, b)=>a + b); //10
reduce() 方法接收一个函数作为累加器(accumulator),数组中的每个值(从左到右)开始缩减,最终为一个值。
[0, 1, 2, 3, 4].reduce(function(previousValue, currentValue, index, array){<br> return previousValue + currentValue;<br>});
reduce接受一个函数,函数有四个参数,分别是:上一次的值,当前值,当前值的索引,数组
[0, 1, 2, 3, 4].reduce(function(previousValue, currentValue, index, array){<br> return previousValue + currentValue;<br>},5);
reduce还有第二个参数,我们可以把这个参数作为第一次调用callback时的第一个参数
reduceRight
var arr = [0,1,2,3,4];<br>arr.reduceRight(function (preValue,curValue,index,array) {<br> return preValue + curValue;<br>}); // 10
reduceRight()方法的功能和reduce()功能是一样的,不同的是reduceRight()从数组的末尾向前将数组中的数组项做累加。
find
var stu = [<br> {<br> name: '张三',<br> gender: '男',<br> age: 20<br> },<br> {<br> name: '王小毛',<br> gender: '男',<br> age: 20<br> },<br> {<br> name: '李四',<br> gender: '男',<br> age: 20<br> }<br>]
stu.find((element) => (element.name == '李四'))
find()方法返回数组中符合测试函数条件的第一个元素。否则返回undefined
findIndex
[1,2,3].findIndex(x => x == 4);<br>// Returns an index value of -1.
对于数组中的每个元素,findIndex 方法都会调用一次回调函数(采用升序索引顺序),直到有元素返回 true。只要有一个元素返回 true,findIndex 立即返回该返回 true 的元素的索引值。如果数组中没有任何元素返回 true,则 findIndex 返回 -1<br>
findIndex 不会改变数组对象。
keys,values,entries
for (let index of ['a', 'b'].keys()) {<br>console.log(index);<br>}<br>// 0<br>// 1<br>for (let elem of ['a', 'b'].values()) {<br>console.log(elem);<br>}<br>// 'a'<br>// 'b'<br>for (let [index, elem] of ['a', 'b'].entries()) {<br>console.log(index, elem);<br>}<br>// 0 "a"<br>// 1 "b"
ES6 提供三个新的方法 —— entries(),keys()和values() —— 用于遍历数组。它们都返回一个遍历器对象,可以用for...of循环进行遍历,唯一的区别是keys()是对键名的遍历、values()是对键值的遍历,entries()是对键值对的遍历
0 条评论
下一页