MST

星途 面试题库

面试题:JavaScript中高阶函数如何提高代码复用率 - 复杂场景

假设有一个需求,要对一组用户对象(每个对象包含`name`和`age`属性)进行不同的操作。如筛选出年龄大于30岁的用户,然后对这些用户的名字进行大写转换。请使用高阶函数(如`filter`和`map`)链式调用实现这个需求,并阐述这种方式是怎样提高代码复用率的,如果以后有类似的筛选和转换需求,如何复用代码。
34.7万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试

假设用户对象数组为users,以JavaScript为例实现如下:

const users = [
    {name: 'Alice', age: 25},
    {name: 'Bob', age: 35},
    {name: 'Charlie', age: 40}
];

const result = users
   .filter(user => user.age > 30)
   .map(user => user.name.toUpperCase());

console.log(result);

这种方式提高代码复用率主要体现在:

  1. filter函数复用filter函数的逻辑是通用的,只需要传入不同的筛选条件函数,就可以应用于各种对象数组筛选场景。例如,如果要筛选出年龄小于20岁的用户,只需修改filter的回调函数user => user.age < 20,而filter本身的实现无需改动。
  2. map函数复用map函数同样具有通用性,当有对数组中每个元素进行某种转换的需求时,不管是对用户名字大写转换,还是对其他对象的某个属性进行特定计算等,只要传入对应的转换函数,map函数就可以复用。

对于以后类似的筛选和转换需求,可以这样复用代码:

  1. 筛选复用:根据新的筛选条件,定义新的回调函数传递给filter。如筛选性别为男性的用户users.filter(user => user.gender ==='male')
  2. 转换复用:按照新的转换逻辑,定义回调函数传递给map。比如将用户年龄乘以2 users.map(user => user.age * 2)