Javascript 如何检查数组元素是否匹配某些模式(例如:xxyy)?

Javascript 如何检查数组元素是否匹配某些模式(例如:xxyy)?,javascript,arrays,algorithm,Javascript,Arrays,Algorithm,例如,我有一个数组: [1,2,3,2,2,2,1,2,3] ,它与模式XXXXYY匹配,因为它(至少)有四个“2”和两个“1”,但我的问题是,如何检查数组是否与这种模式匹配?我试过: const arr=[1,2,3,2,2,1,3,2]; 常量模式=[4,2]; 设m=newmap(); for(arr的const num){ 如果(!m[num]){ m[num]=0; } m[num]++; } 设i=0; 让isMatch=true; 用于(常量键,单位为m){ 如果(m[key]

例如,我有一个数组:

[1,2,3,2,2,2,1,2,3]
,它与模式XXXXYY匹配,因为它(至少)有四个“2”和两个“1”,但我的问题是,如何检查数组是否与这种模式匹配?我试过:

const arr=[1,2,3,2,2,1,3,2];
常量模式=[4,2];
设m=newmap();
for(arr的const num){
如果(!m[num]){
m[num]=0;
}
m[num]++;
}
设i=0;
让isMatch=true;
用于(常量键,单位为m){

如果(m[key],您可以对值进行计数,然后进行排序计数,并根据排序模式进行检查

var DESC=(a,b)=>b-a,
数组=[1,2,3,2,2,2,1,3,2],
模式=[4,2],
计数=数组
.from(array.reduce((m,v)=>m.set(v,(m.get(v)| | 0)+1),new Map.values())
.sort(DESC),
检查=模式
.sort(DESC)
.每((c,i)=>计数[i]>=c);
控制台日志(检查);

console.log(count);
更简单?你的意思是“正确”-因为你的方法根本上是有缺陷的,m将是1:2,2:4,3:2-所以你的for循环的m[key]是2,4,2…因为2So,这个问题说明是否有
n
不同类型的元素具有预期的频率。如果是,那么给定的模式是可能的。