MST

星途 面试题库

面试题:JavaScript数组元素添加删除的高级难度优化问题

给定一个大型JavaScript数组const bigArr = Array.from({length: 10000}, (_, i) => i + 1);,需要每隔10个元素删除一个,然后在数组中间位置添加一个新元素'newElement',请写出高效的代码实现,并解释代码中采取的优化策略,如何避免性能瓶颈。
13.6万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试
const bigArr = Array.from({length: 10000}, (_, i) => i + 1);
// 每隔10个元素删除一个
for (let i = 9; i < bigArr.length; i += 10) {
    bigArr.splice(i, 1);
}
// 在数组中间位置添加新元素
const middleIndex = Math.floor(bigArr.length / 2);
bigArr.splice(middleIndex, 0, 'newElement');

优化策略及避免性能瓶颈说明:

  1. 删除操作:采用for循环,从索引9开始,每次递增10,直接使用splice删除元素。由于for循环的性能相对稳定,这样可以按规律删除元素。虽然splice在删除元素时会引起数组的重排,但因为是按固定间隔删除,整体性能相对可控。
  2. 添加操作:使用Math.floor计算数组的中间索引位置,然后使用splice在该位置插入新元素。Math.floor是一个高效的取整操作,splice在已知索引位置插入元素时,性能开销主要集中在数组重排,选择中间位置插入可以尽量平衡数组两端的重排开销,避免在数组头部或尾部插入导致大量元素移动带来的性能瓶颈。