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

如何判断一个数组是否存在于另一个数组中?

判断数组是否存在于另一个数组中的替代方法

在JavaScript里,直接用indexOf()或includes()判断子数组是否存在于父数组中会失效,比如这段代码:

var grades = [['English', 'A'], ['Math', 'B'], ['Geography', 'C']];
var englishGrade = ['English', 'A'];
Logger.log(grades.indexOf(englishGrade));
// 代码返回-1而非预期的0

原因是indexOf()和includes()用**严格相等(===)**比较元素,两个内容相同的独立数组属于不同引用,所以匹配失败。

下面是几种可行的解决方法:

  • 用some()+every()逐项对比
    遍历父数组,先检查数组长度是否一致,再逐个对比每一项内容:

    const exists = grades.some(grade => 
      grade.length === englishGrade.length && 
      grade.every((item, idx) => item === englishGrade[idx])
    );
    Logger.log(exists); // 输出true
    
  • 转字符串后对比
    将数组转为JSON字符串(或用join()拼接),再用字符串方法判断:

    const gradesStr = grades.map(g => JSON.stringify(g));
    const targetStr = JSON.stringify(englishGrade);
    Logger.log(gradesStr.includes(targetStr)); // 输出true
    

    注意:如果数组包含无法JSON序列化的元素(如函数、Symbol),这种方法不适用。

  • 封装通用工具函数
    写一个可复用的函数,处理各种数组包含判断场景:

    function isSubArrayExist(parentArr, subArr) {
      return parentArr.some(item => {
        if (!Array.isArray(item) || item.length !== subArr.length) return false;
        return item.every((val, idx) => val === subArr[idx]);
      });
    }
    Logger.log(isSubArrayExist(grades, englishGrade)); // 输出true
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 23:55:20