zoukankan      html  css  js  c++  java
  • js 数组 map方法

    map()经常用来遍历数据。

    map()的作用就是“映射”,也就是原数组被“映射”成对应新数组。

    1. 方法概述

         map() 方法返回一个新数组,这个新数组:由原数组中的每个元素调用一个指定方法后的返回值组成的新数组。

      map() 不会对空数组进行检测。

      map() 不会改变原始数组。

     var arr = ["a","b","c","d","e"];
            arr.map(function(currentValue,index,arr){
                console.log("当前元素"+currentValue)
           console.log("当前索引"+index)
                console.log("数组对象"+arr)
            })

    map的参数:

                currentValue  必须。当前元素的值

                index  可选。当期元素的索引值

                arr  可选。当期元素属于的数组对象

     map()跟filter()  和reduce()  的区别

    1,举个例子使用:数值项求平方

    // 例子数值项求平方
    let data = [1,2,3,4,5];
    let newData = data.map(function (item){
        return item * item;
    
    });
    console.log(newData);
    //箭头函数的写法
    let newData2 = data.map(item => item *item);
    console.log(newData2);

    2,在实际工作中使用,我们可以利用map方法方便获得数组对象中的特定属性值

    // 在实际中,我们可以利用map方法方便获得数组对象中的特定属性值
    let users = [
        {"name": "张小花", "email": "zhang@qq.com"},
        {"name": "body", "email": "body@qq.com"},
        {"name": "李小璐", "email": "li@qq.com"}
    ];
    let newEmail = users.map(function (item) {
        return item.name;
    });
    console.log(newEmail.join(','));
    //第2种获取数组对象中的值
    let emails = [];
    users.map(function (item){
        emails.push(item.email);
    });
    console.log(emails);
    // ["zhang@qq.com", "body@qq.com", "li@qq.com"]

    3,用map()调用一个方法的使用

    // 调用一个方法:把字符串转整数    
    let arr1 = ["1", "2", "3"];
    
    function returnInt (element){
        return parseInt(element, 10);
    }
    let newArr1 = arr1.map(returnInt);
    console.log(newArr1);

    4,接口数据映射,从接口得到数据 res

    // 接口数据映射,从接口得到数据 res
    let r = res.map(item => {
        return {
            title: item.name,
            sex: item.sex === 1? '男':item.sex === 0?'女':'保密',
            age: item.age,
            avatar: item.img
        }
    })

    5,JS模拟实现数组的map方法

    // JS模拟实现数组的map方法
    //思路: 直接Array.map()就可以调用到map方法,那他应该是在原型链上的,然后接收一个匿名函数做参数,通过循环调用传入的匿名函数
    Array.prototype.newMap = function (fn){
        let newArr = [];
        for (let i = 0; i <this.length; i++) {
            newArr.push(fn(this[i], i, this))
        }
        return newArr;
    }
    
    let arr5 = ["1", "2", "33"];
    arr5.newMap((item, index, arr) =>{
        console.log(item);
    })

    6,map()方法用箭头函数容易出现的错误

    举了个例子:

    var array1 = [1,4,9,16];
    const map1 = array1.map(x => x *2);
    console.log(map1);
    // 结果为 [2,8,18,32]

    而我这样写时:有多条语句时

    var array1 = [1, 4, 9, 16];
     
    const map1 = array1.map(x => {
        if (x == 4) {
            return x * 2;
        }
    });
     
    console.log(map1);
    // 打印结果为 [undefined, 8, undefined, undefined]

    为什么会出现三个undefined呢?而不是我预期的[1,8,9,16]。

    这样写只是增加了一个条件,即x的值为4时才乘以2,之所以会出现undefined,是因为map()方法创建了一个新数组,但新数组并不是在遍历完array1后才被赋值的,而是每遍历一次就得到一个值。所以,下面这样修改后就正确了:

    var array1 = [1, 4, 9, 16];
     
    const map1 = array1.map(x => {
        if (x == 4) {
            return x * 2;
        }
        return x;
    });

    这里注意箭头函数有两种格式:
    1.只包含一个表达式,这时花括号和return都省略了。
    2.包含多条语句,这时花括号和return都不能省略。

    大家可以参考:ES6标准新增了一种新的函数



    可以参考:https://blog.csdn.net/weixin_41646716/article/details/91509295

  • 相关阅读:
    [leetcode] Bulls and Cows
    Win7 系统所有应用颜色调整
    一道题反映Java的类初始化过程
    翻转二叉树(深搜-先序遍历-交换Node)
    在一个数组中,除了两个数外,其余数都是两两成对出现,找出这两个数,要求时间复杂度O(n),空间复杂度O(1)
    一道随机函数题:由rand5()生成rand7()
    求一条直线通过的最大点数
    菜根谭#236
    菜根谭#235
    菜根谭#234
  • 原文地址:https://www.cnblogs.com/yizhilin/p/12918559.html
Copyright © 2011-2022 走看看