javascript - 检查打字稿中数组中是否存在元素组合的最佳方法
问题描述
我有一个包含一些元素的数组,我想检查数组中是否存在某个元素组合,目标元素后面跟着检查集的任何元素,如果是,则返回 true,否则返回 false。例如,如果 inputArray 是 ['a', 'b', 'c', 'd'] 并且寻找组合是 ['a', 'd'] 那么它应该返回 true 因为 inputArray 两者都在正确的序列中. 如果 inputArray 是 ['d', 'b', 'c', 'd', 'a'] 并且组合是 ['a', 'd'],那么它应该是假的,因为 inputArray 包括这两个元素但在错误的顺序或
isExist(['a', 'd']) => true
isExist(['a', 'a', 'd']) => true
isExist(['e', 'd']) => false
我可以使用 Set 和 while 循环,但我想知道是否有更优雅或更现代的方法?
export function isExist(checkArray): boolean {
let hasA = false;
let hasB = false;
checkingSet = new Set(['b', 'c', 'd'])
const target = 'a'
inputArray = [...checkArray]
while (inputArray && !!inputArray.length) {
const lastOne = inputArray.pop();
if (!hasA && !!lastOne) {
hasA = chekcingSet.has(lastOne);
}
if (!hasB && !!lastOne) {
hasB = lastOne === target;
}
if (hasA && hasB) {
return true;
}
}
return false;
}
解决方案
要检查数组是否包含'a'
,并且在此'a'
之后至少有一个['b', 'c', 'd']
在数组中,您可以执行此操作。首先,获取数组中第一个的索引'a'
,然后检查该起始索引之后的某个值['b', 'c', 'd']
是否包含在该数组中。
function doesExist(arr) {
const startPos = arr.indexOf('a')
if (startPos < 0)
return false
return ['b', 'c', 'd'].some(char => arr.includes(char, startPos + 1))
}
console.log(doesExist(['a', 'd']))
console.log(doesExist(['a', 'a', 'd']))
console.log(doesExist(['e', 'd']))
console.log(doesExist(['d', 'a']))
推荐阅读
- jquery - 当一个选择框选项被选中时做某事,否则使用 jquery 做其他事情
- javascript - clearInterval 似乎正在停止不相关的代码
- javascript - 如何在网页上流式传输(分段)mp4 视频
- sed - 未找到 sed 反向引用
- validation - Codeigniter3 - FormValidation - 验证布尔值始终为“假”
- android - 迁移到 ListAdapter Android 时 notifyItemMoved() 不起作用
- symfony - Symfony 升级给我从 4.1 到 4.4 的错误
- javascript - Typescript,React-循环依赖解决问题。TypeError:对象原型可能只是一个对象或null:未定义
- python - 在 Python 中创建所有东西的集合
- c++ - 如何保护他人服务器上的知识产权