目录

前端for循环遍历foreachmap使用

前端for循环遍历——foreach、map使用


title: 前端不同类型的for循环遍历——foreach、map date: 2025-01-04 11:02:17 tags: javascript

前端不同类型的for循环遍历

场景:很多时候后端发来的数据是不能够完全契合前端的需求的,比如你要一个数据对象中的值,但是这个值却作为了key出现;比如你要通过一个数组中的对象的某个属性来确定到底取哪个对象。

一、for与foreach

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 计算for循环遍历所需要的相关的时间的长短
        let arrs = [...Array(99999999).keys()]
        let total = 0
        let time = 0
        let starTime = Date.now()

        for (let index = 0; index < arrs.length; index++) {
           total++
        }

        let endTime = Date.now();
        time = endTime-starTime;

        console.log("for循环遍历共计消耗时间:"+ time+"ms");
        
        total = 0
        starTime = Date.now()
        arrs.forEach(element => {
             total++
        });

        endTime = Date.now();
        time = endTime-starTime;

        console.log("foreach循环遍历共计消耗时间:"+ time+"ms");
    </script>
</body>
</html>

发现两种遍历的效率还是差距挺大的,具体如下测试结果。

https://i-blog.csdnimg.cn/img_convert/eeadb97c56931c771da0fa0005765a76.png

注意:

.forEach()方法是不支持break这种结束方法,但是他 支持return进行结束

.forEach()方法不支持异步等待,他会 直接跳过当中的异步同步化 (async、await)请求操作。

二、map

1.基础遍历

使用.map方法可以帮助遍历数组,同时可以得到数组的元素、下标、还有当前数组本身

let arr = [1,2,3,4,5,6];
arr.map((item,index,arr)=>{
   console.log(item,index,arr);
})

https://i-blog.csdnimg.cn/img_convert/b9276cd76c1569ffdc28d0929b8ce732.png

2.简单生成新数组

return是每次返回一个子元素(假如只有一行简单的代码,也可以去掉return),就不用复杂push操作。

 let arr = [1,2,3,4,5,6];
 //item表示当前的元素,index表示下标,arr当前数组的的相关数据
 let  newArr = arr.map(item=>{
    return item*2
 })
 //2,4,6,8,10,12
 console.log(newArr);

3.清洗对象数组数据

操作 数组对象 中的相关数据,可用于清洗数据

let arr = [{name:"张三",age:18},{name:"李四",age:22},{name:"王五",age:23},]
let newArr = arr.map(item=>{
       return item.name
 })
 //可以仅遍历出了自己想要的属性的数组
 console.log(newArr); // ['张三', '李四', '王五']

4.在数组对象中追加属性、更改属性值

…三个点属于es6新特性,就是用来展开对象中的所有属性的简写,我们是可以复写相关的属性的,不影响使用。

 let arr = [{name:"张三",age:18},{name:"李四",age:22},{name:"王五",age:23},]
 let newArr = arr.map(item=>{
 return {
      ...item,//es6新语法添加所有属性
   		age:`${item.age}岁`,//更改值
      class:1 //添加新属性方法
      }
 })
 console.log(newArr);

简写方法 ,不写return的时候的加上一个小括号来包裹相关的属性。

 let newArr = arr.map(item=>({...item,age:`${item.age}岁`,class:1}))

相关的结果如下所示

https://i-blog.csdnimg.cn/img_convert/205d3b76816d9d5e54de66efa7ba930d.png

5.进行属性名称的解构替换

假如说我们要将name这个属性名称改成uname,可以使用map进行相关的解构替换。这样直接使用一个{属性},可以直接使用,不用再使用item进行相关的调用。

let arr = [{name:"张三",age:18},{name:"李四",age:22},{name:"王五",age:23},]
let newArr = arr.map(({name,age})=>{return{ uname:name,ages:age}})
console.log(newArr);

https://i-blog.csdnimg.cn/img_convert/8dfa2abe927816deff524a111546d60c.png

6.异步请求,同时展示优化

很多时候起哦们去要请求后端接口拿到数据,但是请求接口是异步请求,但是又有相关的需求要同时展示,这个时候就可以利用map添加参数进行异步请求同步化,再使用promise.all一次处理相关的所有数据。

https://i-blog.csdnimg.cn/img_convert/fde282d29ed0cc30f1d74fea2738e7fe.png