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

ExtJS中判断子数组是否存在于另一数组的方法问询

在ExtJS中判断数组是否包含另一个数组的正确方法

嘿,你踩了JavaScript in操作符的常见坑啦——in是用来检查对象的属性名的,不是数组元素!比如[2,1] in [1,2,3]本质上是在问“这个数组对象有没有名为[2,1]的属性”,自然会返回false,完全不是你想要的元素包含判断逻辑。

不过ExtJS提供了现成的数组工具方法,不用手动从头写,分两种场景给你解决方案:

场景1:子数组的所有元素都存在于父数组中(不考虑顺序、不严格要求连续)

这应该是你例子里想要的场景(比如[2,1]的元素都在[1,2,3]里),可以用Ext.Array.every()结合Ext.Array.contains()实现:

const parentArray = [1, 2, 3];
const childArray = [2, 1];

// 检查子数组的每一个元素都能在父数组中找到
const isAllElementsContained = Ext.Array.every(childArray, item => {
    return Ext.Array.contains(parentArray, item);
});

if (isAllElementsContained) {
    console.log("true"); // 这里会输出true
}

Ext.Array.every()会遍历子数组的每个元素,只有当所有元素都满足“存在于父数组”的条件时,才返回true,完全符合你的需求。

场景2:子数组是父数组的连续子序列(严格要求顺序和连续性)

如果你需要的是判断[2,3]这种连续的子序列是否存在于[1,2,3]中,ExtJS没有直接的API,但可以基于Ext.Array.indexOf()快速封装一个方法:

function isContinuousSubsequence(parent, child) {
    // 空子数组默认视为包含
    if (child.length === 0) return true;
    let currentIndex = -1;
    for (const item of child) {
        // 从上次找到的位置的下一位开始查找
        currentIndex = Ext.Array.indexOf(parent, item, currentIndex + 1);
        // 找不到直接返回false
        if (currentIndex === -1) return false;
    }
    return true;
}

// 测试示例
console.log(isContinuousSubsequence([1,2,3], [2,1])); // false
console.log(isContinuousSubsequence([1,2,3], [2,3])); // true

额外说明

如果你的场景需要考虑元素的重复次数(比如父数组是[1,2,2,3],子数组是[2,2]要返回true,但子数组是[2,2,2]要返回false),那需要做频率统计,ExtJS没有现成方法,不过可以基于Ext.Array.count()来实现,但这种场景相对少见,如果你需要可以再细化需求~

内容的提问来源于stack exchange,提问作者Amor.o

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:52:14