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

如何不使用null实现JS数组重复校验与非重复元素追加

数组非重复合并无需null占位的实现方案

你当前代码出现无意义null的核心原因是错把三元表达式用在了仅需执行条件副作用的场景:三元是用来返回值的表达式,两个分支必须都有返回结果,才需要用null做无意义占位,这类场景优先用条件语句实现,根本不需要占位值。

以下是几种可直接替换的实现方案:

  • 方案1:直接替换为if判断(最贴合原有逻辑、可读性最高)
    完全保留原有的「遍历array2、元素不存在则push到array1」的逻辑,删掉三元表达式,用基础条件判断即可,全程不会产生无意义的null值:

    array2.forEach((item) => {
      if (!array1.includes(item)) {
        array1.push(item)
      }
    })
    
  • 方案2:利用逻辑短路实现极简写法(适合个人脚本等轻量场景)
    利用&&的短路特性:前面的判断条件为真时才会执行后面的push操作,不需要写三元分支,也不需要null占位:

    array2.forEach(item => !array1.includes(item) && array1.push(item))
    

    注意:这种写法可读性弱于if判断,团队协作的项目不推荐使用,避免增加后续维护成本。

  • 方案3:用Set实现高性能去重合并(适合数据量较大的场景)
    原写法中array1.includes(item)每次都要遍历array1查找,时间复杂度为O(n*m),数组越大执行越慢。用Set结构做查找的时间复杂度为O(1),整体性能提升明显:
    如果不需要保留原array1的引用,直接生成新的合并数组可以写得非常简洁:

    const mergedArray = [...new Set([...array1, ...array2])]
    

    如果需要和原逻辑一致、在原array1对象上做追加(不改变array1的引用地址),可以这么写:

    const existedSet = new Set(array1)
    array2.forEach(item => {
      if (existedSet.has(item)) return
      existedSet.add(item)
      array1.push(item)
    })
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 02:18:14