检查元素组合的最佳方法存在于typescript中的数组中



我有一个带有某个元素的数组,我想检查目标元素后面的数组中是否存在某个元素组合,如果是,则返回true,否则返回false。例如如果inputArray是[‘a’,'b','c','d'],并且查找组合是[‘’,'d'],则它应该返回true,因为inputArray在正确的序列中同时具有这两个值。如果inputArray是['d','b','c','d','a'],并且组合是[a'a','d'],则它应该为false,因为inputArray包含这两个元素,但顺序错误或

isExist(['a', 'd']) => true 
isExist(['a', 'a', 'd']) => true
isExist(['e', 'd']) => false

我可以使用Set and 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']))

这是通用版本,它是O(n(。

function doesDupleExistInOrder([el1, el2], arr) {
let index = arr.indexOf(el1)
if (index == -1) return false;
return arr.includes(el2, index + 1)
}
console.log(doesDupleExistInOrder(["a", "d"], ["a", "b", "c", "d", "e"])); // true
console.log(doesDupleExistInOrder(["a", "b"], ["a", "b", "c", "d", "e"])); // true
console.log(doesDupleExistInOrder(["d", "e"], ["a", "b", "c", "d", "e"])); // true
console.log(doesDupleExistInOrder(["d", "a"], ["a", "b", "c", "d", "e"])); // false
console.log(doesDupleExistInOrder(["d", "a"], ["a"]));                     // false
console.log(doesDupleExistInOrder(["d", "a"], []));                        // false

如果你想要一个特定的版本,那么就试试通用功能AKA:

let doesADExist = arr => doesDupleExistInOrder(["a", "d"], arr);
console.log(doesADExist(["a", "b", "c", "d", "e"]));  // true

相关内容

  • 没有找到相关文章

最新更新