【发布时间】:2021-09-13 14:23:27
【问题描述】:
我有一个包含一些元素的数组,我想检查数组中是否存在某个元素组合,目标元素后面跟着检查集的任何元素,如果是,则返回 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;
}
【问题讨论】:
-
我不认为我理解您期望的输出。当 set 为 b,c,d 时,a,d 是如何正确的
-
什么是
target?为什么checkingSet在函数内部定义而不是作为参数传递? -
您能否更好地解释一下您的方法实际上要做什么。
-
为什么要使用双感叹号(!!)?
-
已更新,@Snirka 需要确保 pop 存在
标签: javascript arrays typescript ecmascript-2020 ecmascript-2021