You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何移除数组中的空元素?求性能最优的推荐实现方案

数组移除空元素:最优方案分析

先明确需求:
原始数组:

const array = ["a","","c","","e","f","g"]

要处理成仅保留非空字符串的数组:

["a","c","e","f","g"]

下面逐个分析你提到的几种方法,看看哪款最适配场景:

各方法的实际表现对比

1. array.map

map的核心是将每个元素转换为新值,输出与原数组长度一致的新数组,它天生不是用来过滤元素的。硬要用的话,你得在回调里返回非空元素,空元素返回undefined,之后还得再过滤一遍这些undefined——等于遍历两次数组,纯纯多此一举,性能拉胯,直接pass。

2. array.slice

slice就是个数组截取工具,只能按索引范围切出一段连续的子数组,根本没法精准过滤空元素,完全不搭边,直接排除。

3. array.splice

splice是直接在原数组上修改的方法,要删空元素得倒着遍历(正着删会因为元素移位导致漏删),代码大概是这样:

for (let i = array.length - 1; i >= 0; i--) {
  if (array[i] === "") {
    array.splice(i, 1);
  }
}

但问题是,每次splice删除元素,后面的所有元素都得往前挪一位,数组越大,挪动的元素越多,性能损耗就越大。而且它会修改原数组,要是其他代码还依赖原数组,很容易出bug,灵活性太差。

4. array.filter

filter就是专门干过滤这件事的!它遍历一次数组,把符合条件的元素挑出来组成新数组,代码超简洁:

// 精准匹配空字符串
const filteredArray = array.filter(item => item !== "");
// 或者利用空字符串是假值,更简写
const filteredArray = array.filter(Boolean);

性能上,filter只走一次遍历,没有额外的元素移动操作,效率拉满。而且它返回新数组,不会改动原数组,避免了意外修改带来的问题,代码一眼就能看懂,可读性拉满。

最终结论

性能最优、最推荐的方案就是array.filter,不管是代码简洁度、性能表现还是安全性,都是完全适配需求的首选。

内容的提问来源于stack exchange,提问作者JeremyFc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 23:25:16