JavaScript中是否有高效方法可从数组内提取全部指定类型的值?
性能层面结论
你当前的实现已经是最优水平,不存在本质上效率更高的方案:
- 时间复杂度固定为O(n):要筛选所有符合条件的元素必须完整遍历一次数组,没有办法降低时间复杂度等级
- 不同遍历方法的性能差异极小:forEach、for循环、filter方法的底层都是V8等JS引擎高度优化过的实现,只有在数组长度超过百万级的极端场景下才会出现可感知的性能差,普通业务场景完全不需要考虑
- 极端性能优化方案:如果确实要处理超大数组,可以用普通for循环减少回调函数调用开销,性能能提升5%~10%:
const newArray = []; const arrLength = oldArray.length; for (let i = 0; i < arrLength; i++) { const item = oldArray[i]; if (typeof item === 'string') newArray.push(item); }
更简洁的写法
如果你想要类似Python列表推导的简洁写法,直接用JS内置的filter方法即可,逻辑和你现有的实现完全等价,可读性更强:
const newArray = oldArray.filter(item => typeof item === 'string');
内容的提问来源于stack exchange,提问作者wibbuffey
相关产品推荐
相关产品推荐

