MST

星途 面试题库

面试题:JavaScript数组迭代在复杂场景下的优化

给定一个对象数组const users = [{name: 'Alice', age: 25}, {name: 'Bob', age: 30}, {name: 'Charlie', age: 20}]; 要筛选出年龄大于22岁的用户,并将他们的名字转为大写后组成新数组。请给出优化的JavaScript数组迭代代码,并阐述优化思路,包括可能涉及的性能考量。
16.5万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试

代码实现

const users = [{name: 'Alice', age: 25}, {name: 'Bob', age: 30}, {name: 'Charlie', age: 20}];
const result = users
  .filter(user => user.age > 22)
  .map(user => user.name.toUpperCase());

优化思路

  1. 使用 filtermap 方法:这两个方法清晰地表达了筛选和转换的操作意图。filter 方法用于筛选出符合条件(年龄大于22岁)的用户,map 方法用于将筛选后的用户名字转为大写。
  2. 链式调用:通过链式调用 filtermap,代码更加简洁和可读,避免了中间变量的创建,减少了内存开销。

性能考量

  1. 减少中间变量:链式调用避免了创建额外的中间数组来存储筛选后的结果,从而减少了内存占用。如果使用传统的 for 循环,可能需要先创建一个新数组来存储筛选后的用户,然后再遍历这个新数组进行名字转换。
  2. 遍历次数:在链式调用 filtermap 的情况下,数组只被遍历两次(一次 filter,一次 map)。相比传统的嵌套 for 循环,在某些情况下,这种方式可以减少不必要的循环操作,提高性能。但如果数组非常小,这种性能提升可能并不明显,甚至可能因为函数调用的开销而略有下降。不过,在大多数实际场景中,这种链式调用的方式在代码可读性和性能之间取得了较好的平衡。