JavaScript中常见数组函数map、filter、find、sort的解析

前言

说起JavaScript中常见的数组函数,如果突然让你说出五个,你可能一下子还想不出,不过,当你冷静以下,你就会列出包括forEach、map、filter、find、sort、some在内的众多函数。对于这些常见的数组函数,面试中主要的考察的有两点,一是手写实现这些函数,如果你还处于懵懂状态,请看这里前端面试中常见的原生JS手写实现函数

二是面试官会问,请说出这些函数的特性。这一点或许很多人会忽略或者不够重视,这样说不定就会在面试中吃亏。所以,这里我们将讲解这些函数的特性,让你更好的理解这些数组函数,这样在手写实现这些函数时,印象会更加深刻。

map函数

map函数功能很强大,顾名思义,“map"即"映射”,也就是原数组被"映射"成对应新数组。

特点

  • 新建一个数组,需要有承载对象,也意味着原始数组在调用它后不会发生变化;
  • 该数组中的每个元素都调用一个提供的函数后返回结果。
  • 创建新数组不代表不能用它改变原有数组,你用原有数组去承载就可以:let arr = [1,2,3]; arr = arr.map(item => { return item * 2 })
  • map()中每个元素都要执行相应的回调函数,所以必须要有return,如果你想给数组做一定的过滤处理,那map()基本上行不通:
let newArr = [1,2,3,4,5].map(item => { if(item > 3) return item })
// => [undefined, undefined, undefined, 4, 5]
最终得到的结果是[undefined, undefined, undefined, 4, 5]。别和我说你简单处理一下就能凑合用, 人生不能凑合,代码也是!

filter函数

特点

  • map()没法做到的过滤,就交给filter()去完成,这个大家肯定也都知道。filter()和map()很像,也是创建一个新数组,新数组中的元素是筛选出来的符合条件的所有对象。简单写个例子:
let newArr = [1,2,3,4,5].filter(item =>{
   if(item > 3) return item 
})
//  => [4,5]

forEach函数

特点

  • 可以改变数组自身,没有返回值;
  • 中途不能用常规操作跳出循环,可以用抛出异常(try/catch)的方式,但不推荐这样做;
  • forEach()不一定改变自身数组。我们可以看看数组中的元素是值类型和引用类型场景下,是否都能获得改变:当数组中元素是值类型,forEach绝对不会改变数组;当是引用类型,则可以改变数组
  • 不支持链式操作

sort函数

特点

  • sort()用于对数组的元素进行排序。排序顺序可以是字母或数字,并按升序或降序
  • 默认排序按字母升序(更准确一些是根据字符串Unicode码点)
  • 直接改变原始数组
  • 如果想按照其他标准进行排序,就需提供比较函数compareFunction(a,b),数组会按照调用该函数的返回值排序,即a和b是两个将要比较的元素:
    • 如果compareFunction(a,b)小于0,则a排列到b之前;
    • 如果 compareFunction(a, b)等于0,a和b的相对位置不变(并不保证);
    • 如果 compareFunction(a, b)大于0,b排列到a之前; 直接上例子
[3,4,2,1,5].sort()
// => [1,2,3,4,5]

['Javascript','Vue','React','Node','Webpack'].sort();
// => ["Javascript", "Node", "React", "Vue", "Webpack"]

some函数

特点

  • 用于检查数组中是否有某些符合条件
  • 只要有一个满足即返回true,之后的不再执行
  • 返回Boolean值
var result = [
   {name:'浙江省',age:76},
   {name:'江苏省',age:98}
].some(item => {
	return item.age > 80 
});
=> true

every函数

特点

  • 如果说some()是"||“判断,那every()就是”&&"判断,它用于检测数组中的每一项是否都满足条件,只有都满足了才会返回true
var result = [
   {name:'霍去病',age:16},
   {name:'卫青',age:32}
].every(item => {
	return item.age > 20 
});
=> false

find函数

特点

  • find()顾名思义,就是用来在数组中找到我们所需要的元素,并且和some()一样,只要有一个满足即返回该元素,不会多余遍历,对性能很友善
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: JavaScript 的 `map` 和 `filter` 方法都是数组的内置方法,用于处理数组元素。 - `map` 方法:将数组的每一个元素映射到另一个数组,并返回新数组。它会对数组的每个元素执行一次提供的回调函数,并将回调函数的返回值存储到新的数组。 - `filter` 方法:通过过滤数组元素创建新的数组。它会对数组的每个元素执行一次提供的回调函数,如果回调函数的返回值为 `true`,则将该元素存储到新的数组。 总之,`map` 方法适用于对数组元素进行修改,而 `filter` 方法适用于从数组选择符合特定条件的元素。 ### 回答2: JavaScript数组map方法和filter方法是两种常用的数组操作方法,它们有以下区别: 1. 功能不同:map方法用于对数组的每个元素进行处理,并返回一个新的数组,新数组的元素是原数组经过处理后的结果;而filter方法用于根据指定条件对数组的元素进行筛选,并返回一个新的数组,新数组包含满足条件的元素。 2. 返回值不同:map方法返回一个新的数组,该数组的长度和原数组相同,但元素是经过处理后的结果;而filter方法返回一个新的数组,该数组的长度可能小于或等于原数组,只包含满足条件的元素。 3. 处理方式不同:map方法会遍历数组的每个元素,并执行回调函数来处理每个元素;而filter方法也会遍历数组的每个元素,但会根据指定的条件判断是否保留该元素。 示例使用: ``` // map方法示例 const numbers = [1, 2, 3, 4, 5]; const multipliedNumbers = numbers.map(num => num * 2); console.log(multipliedNumbers); // 输出: [2, 4, 6, 8, 10] // filter方法示例 const words = ['hello', 'world', 'javascript', 'map', 'filter']; const filteredWords = words.filter(word => word.length > 5); console.log(filteredWords); // 输出: ['javascript', 'filter'] ``` 综上所述,数组map方法和filter方法在功能、返回值和处理方式等方面存在明显区别,可以根据具体需求选择使用。 ### 回答3: JavaScript数组map方法和filter方法都是用来处理数组的方法,但有着不同的功能和用途。 map方法是对数组的每个元素进行遍历,并将每个元素经过处理后生成一个新的数组。它接受一个回调函数作为参数,在每次遍历数组的过程数组的当前元素传递给回调函数进行处理,然后将处理后的结果存入新的数组。最终返回处理后的新数组。例如: ```javascript const arr = [1, 2, 3]; const newArr = arr.map((item) => item * 2); console.log(newArr); // [2, 4, 6] ``` filter方法则是根据指定的条件对数组进行筛选过滤,返回满足条件的元素组成的新数组。它也接受一个回调函数作为参数,在每次遍历数组的过程数组的当前元素传递给回调函数进行判断,如果回调函数返回true,则将该元素添加到新数组,否则忽略该元素。最终返回满足条件的新数组。例如: ```javascript const arr = [1, 2, 3, 4, 5]; const newArr = arr.filter((item) => item % 2 === 0); console.log(newArr); // [2, 4] ``` 可以看出,map方法主要用于对数组的每个元素进行处理和转换,而filter方法主要用于对数组进行筛选和过滤。它们的使用场景和用途是不同的。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值