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

使用array.includes检测数组是否包含目标数组失败,如何解决?

问题原因

JavaScript中数组属于引用类型,Array.prototype.includes()方法使用严格相等运算符(===)判断元素是否存在。你代码里的[0,0]和polygonBuild[0][0]里的[0,0]是两个独立的数组实例,引用地址不同,所以严格相等判断返回false,导致includes结果为false。

解决方案

方法一:用some + every逐元素比较

遍历目标数组,对每个子数组和要查找的数组逐个元素对比:

const polygonBuild = [[
    [
        [0, 0],
        [50, 0],
        [100, 0],
        [100, 50],
        [100, 100],
        [50, 100],
        [50, 50],
        [0, 50]
    ]
]];

const target = [0, 0];
const isEndEdge = polygonBuild[0][0].some(item => 
  // 先确保长度一致,再逐元素对比
  item.length === target.length && item.every((val, idx) => val === target[idx])
);

console.log(isEndEdge); // 输出 true

方法二:转字符串比较

将数组序列化为字符串后,用字符串的相等判断来匹配:

const polygonBuild = [[
    [
        [0, 0],
        [50, 0],
        [100, 0],
        [100, 50],
        [100, 100],
        [50, 100],
        [50, 50],
        [0, 50]
    ]
]];

const targetStr = JSON.stringify([0, 0]);
const isEndEdge = polygonBuild[0][0].some(item => JSON.stringify(item) === targetStr);

console.log(isEndEdge); // 输出 true

两种方法的注意点

  • 方法一:只适用于元素为基本类型(数字、字符串等)的数组,对比精准,不会出现序列化导致的异常。
  • 方法二:如果数组包含undefined、function、Symbol这类无法被JSON.stringify正确序列化的值,会出现匹配错误,慎用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 11:42:33