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

Jest中如何判断两个数组元素相同且出现次数一致(顺序无关)

Jest 验证数组元素出现次数相等的实现方案

Jest 本身没有提供原生 API 直接匹配「两个数组元素出现次数完全相等、不要求排列顺序」的需求,你可以用以下三种方案实现:

  • 方案1:排序后对比(适合基础类型小数组)
    先把两个数组按照相同规则排序,排序后数组结构完全一致,直接用 toEqual 匹配即可:
// 封装工具函数
const sorted = (arr) => [...arr].sort((a, b) => a - b)

// 你的测试用例
expect(sorted([2,1,2])).toEqual(sorted([2,2,1])) // 测试通过
expect(sorted([3,2,1])).toEqual(sorted([1,2,3])) // 测试通过
expect(sorted([2,2,2,1])).toEqual(sorted([2,2,1])) // 测试报错
  • 方案2:统计元素频次后对比(适合大数组/复杂类型元素)
    先统计两个数组中每个元素的出现次数,再对比频次统计结果:
// 封装频次统计工具
const countMap = (arr) => {
  const map = new Map()
  arr.forEach(item => map.set(item, (map.get(item) || 0) + 1))
  return map
}

// 你的测试用例
expect(countMap([2,1,2])).toEqual(countMap([2,2,1])) // 测试通过
expect(countMap([3,2,1])).toEqual(countMap([1,2,3])) // 测试通过
expect(countMap([2,2,2,1])).toEqual(countMap([2,2,1])) // 测试报错
  • 方案3:使用扩展匹配器(可选)
    如果项目允许引入 Jest 扩展库,jest-extended 提供了现成的 toIncludeSameMembers 匹配器,可以直接满足需求:
expect([2,1,2]).toIncludeSameMembers([2,2,1]) // 测试通过
expect([3,2,1]).toIncludeSameMembers([1,2,3]) // 测试通过
expect([2,2,2,1]).toIncludeSameMembers([2,2,1]) // 测试报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 07:54:05