【发布时间】:2020-12-16 18:47:16
【问题描述】:
给定一个包含一些状态字符串的数组,
我想验证数组是否至少包含一个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()
}
}
理想情况下,我想在一个循环中验证这一点,而不是两个循环。
【问题讨论】:
-
在一个循环中执行它很奇怪。因为“如果睡眠存在”的测试一旦找到就可以终止,而“除了好的或睡眠之外的东西”的测试可能必须一直评估到最后
-
@Taplar 我没有看到使用单个循环有什么奇怪的地方。在最坏的情况下(所有条目都是“正常”或“睡眠”),无论如何您都必须扫描整个数组。只有遇到这两个值以外的值时,才能提前突破。无论您使用一个循环还是多个循环,情况都是如此。有关单循环解决方案的示例,请参阅 my answer。
标签: javascript arrays typescript validation filter