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

求助:实现判断数组元素出现次数匹配的JavaScript函数

解决方案

首先需要统计两个数组中每个元素的出现次数,再根据你的示例规则完成校验。从给出的例子来看,判断逻辑应该是:

  • Array2中的所有元素必须在Array1中存在;
  • Array2中每个元素的出现次数不能超过Array1中对应元素的次数;
  • Array2中至少有一个元素的出现次数与Array1中该元素的次数完全相同。

实现代码

function checkArrays(first, second) {
    // 统计第一个数组的元素出现频率
    const countFirst = {};
    for (const num of first) {
        countFirst[num] = (countFirst[num] || 0) + 1;
    }

    // 统计第二个数组的元素出现频率
    const countSecond = {};
    for (const num of second) {
        countSecond[num] = (countSecond[num] || 0) + 1;
    }

    let hasMatchCount = false;

    // 遍历校验第二个数组的频率数据
    for (const [num, count] of Object.entries(countSecond)) {
        // 元素不存在于第一个数组,直接返回false
        if (!countFirst.hasOwnProperty(num)) {
            return false;
        }
        // 出现次数超过第一个数组的对应元素,返回false
        if (count > countFirst[num]) {
            return false;
        }
        // 标记是否有元素的出现次数完全匹配
        if (count === countFirst[num]) {
            hasMatchCount = true;
        }
    }

    // 必须满足前面的所有校验,且至少有一个元素次数完全匹配
    return hasMatchCount;
}

测试你的示例

  1. 测试用例1:
const Array1 = [1,1,1,2,2,2,3,3];
const Array2 = [1,1,2,1];
console.log(checkArrays(Array1, Array2)); // 输出: true

解释:Array2中1的出现次数为3,与Array1中的1次数完全匹配,且2的次数1不超过Array1的3次,符合规则。

  1. 测试用例2:
const Array2 = [1,1,2];
console.log(checkArrays(Array1, Array2)); // 输出: false

解释:Array2中1的次数为2(小于Array1的3次),2的次数为1(小于Array1的3次),没有元素的次数与Array1完全匹配,不符合规则。

  1. 测试用例3:
const Array2 = [1,1,2,3,1];
console.log(checkArrays(Array1, Array2)); // 输出: true

解释:Array2中1的次数为3,与Array1中的1次数完全匹配,2和3的次数都不超过Array1中的对应次数,符合规则。

调整规则的情况

如果你的实际需求是仅校验Array2中所有元素的出现次数不超过Array1中的,不需要至少一个元素次数匹配,可以简化代码:

function checkArrays(first, second) {
    const countFirst = {};
    for (const num of first) {
        countFirst[num] = (countFirst[num] || 0) + 1;
    }

    const countSecond = {};
    for (const num of second) {
        countSecond[num] = (countSecond[num] || 0) + 1;
    }

    for (const [num, count] of Object.entries(countSecond)) {
        if (!countFirst.hasOwnProperty(num) || count > countFirst[num]) {
            return false;
        }
    }

    return true;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 05:27:57