JavaScript 删除数组指定值的常用方法详解

作者:青柠时间:2026-10-23 19:16:45浏览:431

本文详解在 JavaScript 中删除数组指定值的多种实现方式。针对删除所有匹配值,分析了正向遍历 splice 的风险及逆向遍历、filter 过滤等安全方案;针对删除单个值,介绍了利用 some 短路特性与 findIndex 定位下标的方法,帮助开发者根据场景选择合适策略。

删除数组中所有指定值

一、删除数组中所有指定值

首先介绍一种存在隐患的操作方式:


<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
    <script type="text/javascript">
      window.onload = function() {
        var arr = [1, 1, 2, 2, 3, 3, 4, 4, 5, 5];
        console.log(`原始数组:${arr}`);
        arr.forEach((item, i) => {
          if (item == 3) {
            arr.splice(i, 1); // 从下标 i 开始, 删除 1 个元素
          }
        })
        console.log(`删除之后的数组:${arr}`);
      }
    </script>
  </body>
</html>

查看运行结果:

删除数组中所有指定值

从输出结果可以看出,数组中仅删除了一个值为 3 的元素。其原因是:在使用 splice 方法移除一个指定值后,数组结构发生变化,后续元素索引前移。在随后的循环遍历中,原本索引为 5 的另一个 3 移动到了索引 4 的位置。由于循环继续寻找索引 5 的元素,导致漏删了后面的 3,转而处理值为 4 的元素。因此,当需要删除的值不止一个时,这种正向遍历删除的方式存在风险。

1. 若坚持使用 splice 方法配合循环遍历,一种安全的做法是进行逆向遍历:


<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
    <script type="text/javascript">
      window.onload = function() {
        var arr = [1, 1, 2, 2, 3, 3, 4, 4, 5, 5];
        console.log(`原始数组:${arr}`);
        for (let i = arr.length - 1; i > -1; i--) {
          if (arr[i] == 3) {
            arr.splice(i, 1);
          }
        }
        console.log(`删除之后的数组:${arr}`);
      }
    </script>
  </body>
</html>

运行结果如下:

删除数组中所有指定值

2. 利用 filter 方法过滤掉指定值:


<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
    <script type="text/javascript">
      window.onload = function() {
        var arr = [1, 1, 2, 2, 3, 3, 4, 4, 5, 5];
        arr = arr.filter(item => item != 3); // 过滤掉值不为3,返回新数组
        console.log(`filter方法操作之后的数组:${arr}`);
      }
    </script>
  </body>
</html>

运行结果如下:

删除数组中所有指定值

需要注意的是:filter 方法不会修改原数组,而是返回一个包含符合条件元素的新数组。

删除指定一个值

二、删除指定一个值

如果确定只需删除一个指定值,除了通过遍历查找后删除外,还可以使用 some 方法:


<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
    <script type="text/javascript">
      window.onload = function() {
        var arr = [1, 2, 3, 4, 5];
        arr.some((item, i) => {
          if (item == 2) {
            arr.splice(i, 1);
            return true
          }
        })
        console.log(`删除之后的数组:${arr}`);
      }
    </script>
  </body>
</html>

运行结果如下:

删除数组中所有指定值

注意:some 方法在找到符合条件的值并手动返回 true 后,将停止后续遍历(若将 some 替换为 forEach,return 语句将不起作用)。

此外,还可以使用 findIndex 方法:


<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
    <script type="text/javascript">
      window.onload = function() {
        var arr = [1, 2, 3, 4, 5];
        console.log(`原始数组:${arr}`);
        var a = arr.findIndex(item => item == 3);
        arr.splice(a, 1);
        console.log(`删除之后的数组:${arr}`);
      }
    </script>
  </body>
</html>

运行结果如下:

删除数组中所有指定值

注意:findIndex 仅查找第一个符合条件的元素索引,若未找到则返回 -1。

更多详细信息请查阅 MDN 关于数组的文档:

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

作者最新文章