JavaScript中常见的循环遍历


前言

提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、for循环

可读性和易维护性比较查,但是可以及时break结束循环。

let arr = [1,2,3,4,5,6,7]
for(let i = 0;i<arr.length;i++){
    
    
  console.log(arr[i])
}
//输出: 1,2,3,4,5,6,7

二、for…in

主要针对对象的遍历,容易获取对象的对应键值。
[注意]:for…in循环对象的所有枚举属性,需再使用hasOwnProperty()方法来忽略继承属性,即在循环内部判断一下,某个属性是否为对象自身的属性,避免出现遍历失真的情况。

let obj = {
    
    name: 'myname', sex: 'male', age: '10'}
for(let key in obj){
    
    //这里的key是键,不是下标
    if(obj.hasOwnProperty(key)){
    
    
        console.log(obj[key])
    }
}
//输出:myname
//      male
//      10

三、map

map方法将数组的所有成员依次传入参数函数,然后把每一次的执行结果组成一个新数组返回。循环中途是无法停止的,总是会将所有成员遍历完

let arr = [1,2,3,4,5]
let arr2 = arr.map((n)=>{
    
    
      return n+1
})
console.log(arr2) // [2,3,4,5,6]
console.log(arr) // [1,2,3,4,5]

map方法接受一个函数作为参数。该函数调用时,map方法向它传入三个参数:当前成员item、当前位置index和数组本身arr。

let arrObj = [{
    
    
    id: 1,
    name: '1name'
},{
    
    
    id:2,
    name: '2name'
},{
    
    
    id:3,
    name: '3name'
}]
arrObj.map((item,index,arr)=>{
    
    
    console.log(arr) // arrObj
    console.log(index)  // 0 1 2
    console.log(item.name) // 1name 2name 3name
    })

输出:
在这里插入图片描述

四、forEach

forEach的使用方法和map使用方法差不多,只是forEach方法 不返回值,只用来操作数据,且循环中途是无法停止的,总是会将所有成员遍历完。传入三个参数:当前成员item、当前位置index和数组本身arr。

当然如果想要强制停止,可以试一下try catch 语句,抛出一个 error 给 catch 捕捉到,然后在 catch 里面 return,这样就能中止循环了

扫描二维码关注公众号,回复: 12731073 查看本文章
let arrObj = [{
    
    
    id: 1,
    name: '1name'
},{
    
    
    id:2,
    name: '2name'
},{
    
    
    id:3,
    name: '3name'
}]
arrObj.forEach((item,index,arr)=>{
    
    
    console.log(arr) // arrObj
    console.log(index)  // 0 1 2
    console.log(item.name) // 1name 2name 3name
    })

输出:
在这里插入图片描述
注意:map 和 forEach 方法都是只能用来遍历数组,不能用来遍历普通对象。

五、filter过滤循环

filter方法用于过滤数组成员,满足条件的成员组成一个新数组返回。它的参数是一个函数,所有数组成员依次执行该函数,返回结果为true的成员组成一个新数组返回。该方法不会改变原数组。传入三个参数:当前成员item、当前位置index和数组本身arr。

let arrObj = [{
    
    
    id: 1,
    name: '1name'
},{
    
    
    id:2,
    name: '2name'
},{
    
    
    id:3,
    name: '3name'
}]
let arr2 = arrObj.filter((item,index,arr)=>{
    
    
    return (item.name === '1name')
    })
    console.log(arr2)//{id: 1, name: "1name"}

ES5(ECMAScript5)中Array 类中的 filter 方法使用目的是移除所有的 ”false“ 类型元素 (false, null, undefined, 0, NaN or an empty string):

let arr = [3, 4, 5, 2, 3, undefined, null, 0, ""];
let arrNew = arr.filter(Boolean);
console.log(arrNew)  //  [3, 4, 5, 2, 3]

Boolean是一个函数,它会对遍历数组中的元素,并根据元素的真假类型,对应返回 true 或 false.

六、Object.keys遍历对象的属性

Object.keys方法的参数是一个对象返回一个数组。该数组的成员都是该对象自身的(而不是继承的)所有属性名,且只返回可枚举的属性。

let obj = {
    
    name: 'myname', sex: 'male', age: '10'}
console.log(Object.keys(obj))
// ["name", "sex", "age"]

遍历对比

方法 针对 可否停止循环 用法
for 数组 break结束循环 for(let i = 0;i<arr.length;i++){}
for…in 对象 break结束循环 for(let key in obj){}
map 数组 无法停止 arrObj.map((item,index,arr)=>{})
forEach 数组 无法停止 arrObj.forEach((item,index,arr)=>{}
filter 数组 ----- let arr2 = arrObj.filter((item,index,arr)=>{ return ?})
Object.keys 对象 ----- Object.keys(obj),返回的是数组

七、some() 方法

some() 方法用于检测数组中的当前元素是否满足指定条件(函数提供),返回 boolean 值,不改变原数组。跟filter过滤类似,只是返回不同。

let arr = [1,2,3];
let arr2 = arr.some(function(i){
    
    //i为值,不是下标
  return i>1;// 检测当前元素i元素是否大于1
})
// true

八、every() 方法

every() 方法用于检测数组所有元素是否都符合指定条件(通过函数提供),返回 boolean 值,不改变原数组。
注意:every() 方法检测的是所有元素,才返回Boolean值
some()方法检测的是当前元素,就返回。

let arr = [1,2,3];
let arr2 = arr.some(function(i){
    
    
  return i>1;
})
// 检测数组中元素是否都大于1
// false

九、reduce() 方法

reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。

let arr = [1,2,3];
let arr2 = arr.reduce(function(i,j){
    
    
  return i+j;
})
console.log(arr2)
// 6
//arr.reduce第一次操作1+2;这时候数组缩减成了 arr = [3,3];
//所以第二次操作的是 3+3;至此数组还剩最后的一个值 6;返回;

十、for of 循环

for of 循环是Es6中新增的语句,用来替代 for in 和 forEach,它允许你遍历 Arrays(数组), Strings(字符串), Maps(映射), Sets(集合)等可迭代的数据结构,注意它的兼容性。
语法

	for (variable of iterable) {
    
    
	    statement
	}
  • variable:每个迭代的属性值被分配给该变量。
  • iterable:一个具有可枚举属性并且可以迭代的对象。

用例:

参考链接:理解 JavaScript 中的 for…of 循环

猜你喜欢

转载自blog.csdn.net/qq_41096878/article/details/114061203