常用循环遍历数据方法

一、for循环(常用于数组的循环遍历)

let arr = [1,2,3];
for (let i=0; i<arr.length; i++){
 console.log(i,arr[i])
}
// 0 1
// 1 2
// 2 3

二、for in(主要用于遍历普通对象,也可遍历数组)

let obj = {name:'张',age:'三'}
for(let i in obj){
 console.log(i,obj[i])  //i 代表对象的 key 值,obj[i] 代表对应的 value
}
// name 张
// age 三


//***用于遍历数组时,i 输出为字符串形式 若要进行数字运算可用 parseInt(i) 转换为 number 类型

三、while 循环(对一个值或表达式是否达到要求来使用

var arr = [1,2,3];
var i = 0;
while(arr[i]){
   i++;
   console.log(i)
}
console.log('end : ' + i);

//数组arr[i]有值则判断为true就进while继续循环,arr[i]无值则false就跳出循环

for(var i = 0; arr[i]; i++) {
  console.log(i);
}
console.log('end : ' + i);

//这种形式也一样

//二者大致功能相同,使用场景可能有所区别,一般for用来循环遍历数组,而while一般是对一个值或表达式是否达到要求来使用的

里面的for循环也可以这样写:

let i=0;
for (;arr[i];){  //这里两个;代表空语句,就是什么都不做。当arr数组,索引为 i 的那个元素的值,非0(真)时循环。
   console.log(arr[i]) i++; 
}; 

//for(var i=0;i<10;i++ )  //其中var i=0 可以在循环体外定义,i++ 可以写在循环体内,所以for循环也可以简化为 for(;i<10;) 

四、do while循环

let i = 3;
do{
 console.log(i)
 i--;
}
while(i>0)
// 3
// 2
// 1

//do while 循环是 while 循环的一个变体,它首先执行一次操作,然后才进行条件判断,是 true 的话再继续执行操作,是 false 的话循环结束。

五、forEach(只能遍历数组)

具体介绍:https://www.runoob.com/jsref/jsref-foreach.html

let arr = [1,2,3];
arr.forEach(function(i,index){
 console.log(i,index)
})
// 1 0
// 2 1
// 3 2

var numbers = [65, 44, 12, 4];
/** 参数             描述
**  currentValue    必需。当前元素value
**  index     可选。当前元素的索引值。
**  arr     可选。当前元素所属的数组对象。
**/
numbers.forEach(function(item,index,arr){
  arr[index] = item * 10;//得到乘以10以后的值
   console.log(numbers); //***改变了原数组
})

forEach(): 没有返回值,本质上等同于 for 循环,对每一项执行 function 函数。forEach 是改变原数组 。

forEach() 在所有元素调用完毕之前是不能停止的,本身是不支持 continue 与 break 语句的。

不支持 continue,用 return false 或 return true 代替。 不支持 break,用 try catch/every/some 代替: 

//1、实现 continue:

  //forEach() 使用 return 语句实现 continue 关键字的效果:

  var arr = [1,2,3,4,5];
 
  arr.forEach(function (item) {

    if (item === 3) {

        return;
    }
    console.log(item);
  });

  //最后输出:1 2 4 5   说明:item为3的元素跳过

  var arr = [1,2,3,4,5];

  arr.some(function (item) {
    if (item === 3) {
          return;  // 不能为 return false
    }
   console.log(item);
  });

  //最后输出:1 2 4 5 false

//2、实现 break:

  var arr = [1, 2, 3, 4, 5];

  arr.every(function (item) {
        console.log(item);
        return item !== 3;
  });

  //最后输出: 1 2 3 false   说明:输出3后直接跳出循环

六、map()(只能遍历数组,处理数据)

注意:map是返回一个新数组,原数组不变。

let arr = [1,2,3];
let arr2= arr.map(function(i){
 console.log(i)
 return i*2;
})
console.log("新数组:",arr2)
//1 2 3
//新数组: [2,4,6]

七、filter()(遍历数组,筛选数据)

注意:返回通过过滤的元素的新数组,不改变原来的数组

let arr = [1,2,3];
let arr2= arr.filter(function(item){
 return item > 1;
})
console.log(arr2);
//[2,3]

八、some() 与every()  (遍历数组

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

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

九、reduce()与reduceRight()(遍历数组

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

let arr = [1,2,3];
let arr2 = arr.reduce(function(i,j){
 return i+j;
})
// 6

reduceRight()方法,和 reduce() 功能是一样的,它是从数组的末尾处向前开始计算。

let arr = [1,2,3];
let arr2= arr.reduceRight(function(i,j){
 return i+j;
})
// 6

十、for of 循环

es6 中新增的语句,用来替代 for in 和 forEach,允许遍历数组、字符串、映射、集合等可迭代的数据结构,但要注意兼容性。

let arr = ['name','age'];
for(let i of arr){
 console.log(i)
}
// name
// age

十一、用switch 判断条件时

switch case   

如果是跳出循环可用break,会执行switch后的js;

如果是判断可用return false; 不会执行switch后的js。

 // 如果跳出循环执行后续操作  用break
 switch(num){
     case 1: xxxx
         break;
     case 2:xxxx
         break;
     default:
          break;
 }
//是判断且无后续操作 可用  return false;
switch(num){
     case 1: xxxx
         return false;
      case 2:xxxx  
        return false;
     default: 
         return false;
}

 

posted @ 2020-10-27 15:21  阳光下的向日葵  阅读(1468)  评论(0编辑  收藏  举报