You need to enable JavaScript to run this app. JavaScript中二维数组调用includes()方法返回非预期结果问题咨询
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中二维数组调用includes()方法返回非预期结果问题咨询

异常结果的核心原理

JavaScript 对引用类型(数组、对象、函数等)的相等判断逻辑,默认仅比对内存引用地址,不会自动深度匹配内容值。
你的代码中执行逻辑具体为:

  1. coords 数组的每一项都是独立创建的数组实例,各自拥有独立的内存存储地址
  2. 传给includes()方法的参数[0,0],是代码执行时临时新建的独立数组实例,和coords中原本存储的第一个[0,0]元素的内存地址完全不同
  3. 即便两个数组的元素、结构完全一致,只要不是同一个内存引用,includes()就会判定为不匹配,因此最终控制台输出false。

可以对照原始类型的匹配逻辑理解:如果是[1,2,3].includes(1)这类按原始值比对的场景,因为数字、字符串、布尔值等原始类型是直接按值判断,就会返回符合预期的true。

可行的解决方案
  • 方案1:结合some()逐值比对坐标(最适配当前坐标场景,性能最优)
    因为坐标是固定双数字的规整结构,直接逐位比对数值即可,没有额外开销:
    const target = [0, 0];
    const isMatch = coords.some(coord => 
      coord[0] === target[0] && coord[1] === target[1]
    );
    console.log(isMatch); // 输出预期的true
    
  • 方案2:抽离通用数组相等判断函数(适配更灵活的匹配需求)
    如果后续需要匹配不同长度、不同结构的数组,可以封装通用的数组相等判断逻辑,复用性更强:
    // 一维数组相等判断,可按需扩展支持多层嵌套结构
    function isArrayEqual(arr1, arr2) {
      if (arr1.length !== arr2.length) return false;
      return arr1.every((item, index) => item === arr2[index]);
    }
    // 调用匹配
    const isMatch = coords.some(coord => isArrayEqual(coord, [0,0]));
    
  • 方案3:字符串转换简化匹配(仅适合纯数字规整结构)
    对结构完全固定、不存在类型混合的纯数字坐标,可以通过转字符串的方式简化判断,需注意场景局限:
    const isMatch = coords.some(coord => coord.join(',') === [0,0].join(','));
    
    注意:这种写法存在边界问题,比如数组元素同时存在数字和字符串类型、元素本身包含逗号时,会出现误匹配,不建议在通用业务场景使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.07 21:36:08