Sec*_*Son 3 javascript arrays validation filter typescript
给定一个包含一些状态字符串的数组,我想验证该数组是否至少包含一个sleeping状态,然后验证其余状态是否为ok或sleeping。
所以一个有效的数组是['ok', 'sleeping', 'sleeping', 'ok'],一个无效的数组将类似于const states = ['ready', 'working','onBreak','sleeping', 'ok', 'sleeping']
到目前为止我想出的是:
const validArray = ['ok', 'sleeping', 'sleeping', 'ok'];
const isvalid = validArray.some( x => x === 'sleeping')
if(isValid){
const canDoStuff = validArray.some( x => !['ok','sleeping'].includes(x))
if(canDoStuff){
doStuff()
}
}
Run Code Online (Sandbox Code Playgroud)
理想情况下,我想在一个循环中验证它,而不是两个循环。
与其.some检查是否有一项sleeping,不如使用.includes.
但是,你的另一个.some也没有实现正确的逻辑;doStuff仅当至少有一项不匹配时才会运行。.every改为使用,并检查每个是否匹配:
const validate = input => (
input.includes('sleeping') &&
input.every(x => ['ok', 'sleeping'].includes(x))
);
console.log(validate(['ok', 'sleeping', 'sleeping', 'ok']));
console.log(validate(['ready', 'working','onBreak','sleeping', 'ok', 'sleeping']));Run Code Online (Sandbox Code Playgroud)