javascript - 如何检查数组元素是否匹配某些模式(例如:XXXXYY)?
问题描述
例如,我有数组:
[1,2,3,2,2,2,1,2,3]
,它与模式 XXXXYY 匹配,因为它(至少)有四个“2”和两个“1”,但我的问题是,如何检查数组是否匹配这种模式?我试过了:
const arr=[1,2,3,2,2,2,1,3,2];
const pattern=[4,2];
let m=new Map();
for(const num of arr){
if(!m[num]){
m[num]=0;
}
m[num]++;
}
let i=0;
let isMatch=true;
for(const key in m){
if(m[key]<pattern[i]){
isMatch=false;
}
i++;
}
console.log(isMatch);
但是 isMatch 是错误的。有没有更简单的方法来做到这一点?
解决方案
您可以计算这些值,然后进行排序计数并检查排序模式。
var DESC = (a, b) => b - a,
array = [1, 2, 3, 2, 2, 2, 1, 3, 2],
pattern = [4, 2],
count = Array
.from(array.reduce((m, v) => m.set(v, (m.get(v) || 0) + 1), new Map).values())
.sort(DESC),
check = pattern
.sort(DESC)
.every((c, i) => count[i] >= c);
console.log(check);
console.log(count);
推荐阅读
- java - Converting from Map
to POJO - field - How would I save an object of type DateComponents to a CloudKit field?
- microservices - 事件源整个系统坏了
- ruby-on-rails - Any easy ways to group the emails together into a thread using Rails ActionMailer?
- javascript - 如何在 JavaScript 中使用任何高阶函数来获得以下代码所需的输出?
- java - 如何使用 3 个参数 Map<> 请求数据?Java - 安卓工作室
- node.js - 是否可以 module.exports 从异步函数中导出局部变量?
- yii2 - Yii2 pretty Url css link not correct
- java - 如何运行带有阴影依赖项的单元测试?
- postgresql - Does a new line character affect Postgres LIKE text search?