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

 

posted @ 2020-05-19 18:10  云悠  阅读(40790)  评论(1编辑  收藏  举报