js数组高阶函数——map()方法_js map方法(1)

map()语法

⭐map() 方法是数组原型的一个函数,该函数用于对数组中的每个元素进行处理,将其转换为另一个值,最终返回一个新的数组,该数组包含了经过处理后的每个元素。

以下是 map() 方法的基本语法:

array.map(callback(currentValue[, index[, array]])[, thisArg])

其中:

callback :表示对数组中的每个元素要执行的函数。该函数包含三个参数:

  • currentValue:表示正在处理的当前元素。
  • index:可选参数,表示正在处理的当前元素的索引。
  • array:可选参数,表示正在处理的当前数组。

thisArg:可选参数,表示执行 callback 函数时的 this 值。


map()的基本使用

⭐使用 map() 方法将数组中的数字乘以 2 并返回新的数组:

let numbers = [1, 2, 3, 4];
let doubled = numbers.map(function(num) {
    return num \* 2;
});
console.log(doubled); // 输出 [2, 4, 6, 8]

首先我们定义了一个名为 numbers 的数组,其中包含四个数字。我们使用 map() 方法对该数组中的每个元素执行了一次函数,该函数将每个数字乘以 2 并返回新的数组 doubled


⭐将字符串数组转换为数字数组:

let strings = ['1', '2', '3'];
let numbers = strings.map(function(str) {
    return parseInt(str, 10);
});
console.log(numbers); // 输出 [1, 2, 3]

我们声明了一个名为 strings 的数组。我们使用 map() 方法对该数组中的每个元素使用了一次函数,该函数将每个字符串转换为数字并返回新的数组 numbers


⭐将对象数组转换为属性值数组:

let objects = [{ name: 'apple', color: 'red' }, { name: 'banana', color: 'yellow' }, { name: 'orange', color: 'orange' }];
let colors = objects.map(function(obj) {
    return obj.color;
});
console.log(colors); // 输出 ["red", "yellow", "orange"]

⭐将一个数组中的对象转换为另一个数组,只保留对象中的某些属性:

const users = [
  {name: 'Alice', age: 25},
  {name: 'Bob', age: 30},
  {name: 'Charlie', age: 35},
];
const names = users.map(function(user) {
  return user.name;
});
console.log(names); // ['Alice', 'Bob', 'Charlie']


⭐将一个数组中的字符串转换为另一个数组,只保留长度大于等于5的字符串:

const words = ['apple', 'banana', 'cherry', 'date', 'elderberry'];
const longWords = words.map(function(word) {
  if (word.length >= 5) {
    return word;
  }
});
console.log(longWords); // ['apple', 'banana', 'cherry', undefined, 'elderberry']


⭐⭐⭐需要注意的是,在使用 map() 方法时,我们可以选择传递可选参数 thisArg 来设置回调函数的 this 值。如果不传递 thisArg 参数,则默认情况下,回调函数的 this 值为undefined

举个例子:

let numbers = [1, 2, 3];
let obj = { multiplier: 2 };
let doubled = numbers.map(function(num) {
    return num \* this.multiplier;
}, obj);
console.log(doubled); // 输出 [2, 4, 6]

上面的例子中,我们定义了一个名为 numbers 的数组,其中包含三个数字。我们还定义了一个名为 obj 的对象,其中包含一个名为 multiplier 的属性,该属性的值为 2。我们在回调函数中使用 this.multiplier,其中 this 值为 obj,来将数组中的每个元素乘以 2。


map()的优缺点

优点:

  • map()默认会有返回值,一般返回一个数组。这里要强调一下,函数默认没有返回值。如果函数内部没有明确使用return语句返回一个值,那么该函数执行完毕后会自动返回undefined。所以这个也是map()的一个特色
  • 可以方便地对数组中的每个元素进行操作,并生成一个新的数组;
  • 不会改变原始数组。

缺点:

  • 无法使用break,continue,return等关键字控制循环,必须全部遍历完毕才能停止;
  • 对于大型数据集合而言,可能会导致性能问题。

数据小的时候,用map()循环非常的爽,不是很消耗性能。但数据大的情况下,用map()会很耗性能,因为map()会对数组中的每个元素执行一次callback方法。建议数据大的时候,用for循环。虽然多次for循环嵌套看着恶心,但是性能好,是底层的东西。而所谓的map(),set(),for in,for of 都是在for循环的基础上再封装。单从性能角度考虑,远不如for循环优秀。

map()的使用场景

  • 将一组数据转换为另一种形式或格式;
  • 对一组数据进行过滤、去重等操作;
  • 对一组DOM元素进行修改等操作;

刷面试题

刷题的重要性,不用多说。对于应届生或工作年限不长的人来说,刷面试题一方面能够尽可能地快速自己对某个技术点的理解,另一方面在面试时,有一定几率被问到相同或相似题,另外或多或少也能够为自己面试增加一些自信心,可见适当的刷题是很有必要的。

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

  • 前端字节跳动真题解析

  • 【269页】前端大厂面试题宝典

最后平时要进行自我分析与评价,做好职业规划,不断摸索,提高自己的编程能力和抽象思维能力。大厂面试远没有我们想的那么困难,摆好心态,做好准备,你也可以的。

  • 16
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值