我需要判断我的特殊字符串是否在指定范围内?
例子:
// range
[
"01-01-001-001",
"01-01-001-140"
]
// string
"01-01-001-001"
我们需要检测字符串是否在指定范围内? 一个字符串表示一组由破折号(“-”)分隔的“级别”:
4 3 2 1
01 - 01 - 001 - 001
4,3,2,1 是权重。 4 最高,1 最低。
下面是我的 isInRange
函数,用于检查:
function isCodeInRange (code, range) {
var start = range[0].split('-'),
end = range[1].split('-'),
parts = code.split('-')
;
if (parts[0] !== start[0]) {
return false;
}
for (var i = 1, len = parts.length; i < len; i++) {
if (!(Number(parts[i]) >= Number(start[i]) && Number(parts[i]) <= Number(end[i]))) {
if ((Number(parts[i - 1]) >= Number(end[i - 1]))) {
return false;
}
}
}
return true;
}
console.log(isCodeInRange(
'01-01-140-01',
['01-01-138-01', '01-02-140-01']
))
如您所见,该检查的结果为真。一些测试:
console.log(isCodeInRange(
'01-02-140-01',
['01-01-138-01', '01-02-140-01']
)) // true
console.log(isCodeInRange(
'01-01-101-01',
['01-02-138-01', '01-03-140-01']
)) // false
console.log(isCodeInRange(
'01-01-001-01',
['01-01-001-01', '01-01-140-01']
)) // true
我的算法正确吗?它们是否涵盖了所有可能的极端情况?
最佳答案
您可以拆分字符串和映射数字并检查范围。
function isCodeInRange(values, ranges) {
ranges = ranges.map(s => s.split('-').map(Number));
return values
.split('-')
.map(Number)
.every((v, i) => ranges[0][i] <= v && v <= ranges[1][i]);
}
console.log(isCodeInRange('01-02-140-01', ['01-01-138-01', '01-02-140-01'])); // true not false
console.log(isCodeInRange('01-01-101-01', ['01-02-138-01', '01-03-140-01'])); // false
console.log(isCodeInRange('01-01-001-01', ['01-01-001-01', '01-01-140-01'])); // true
没有 every
和 ES5 的版本。
function isCodeInRange(values, ranges) {
var every = true;
ranges = ranges.map(function (s) { return s.split('-').map(Number); });
values
.split('-')
.map(Number)
.forEach(function (v, i) {
every = every && ranges[0][i] <= v && v <= ranges[1][i];
});
return every;
}
console.log(isCodeInRange('01-02-140-01', ['01-01-138-01', '01-02-140-01'])); // true not false
console.log(isCodeInRange('01-01-101-01', ['01-02-138-01', '01-03-140-01'])); // false
console.log(isCodeInRange('01-01-001-01', ['01-01-001-01', '01-01-140-01'])); // true
关于javascript - 我的算法正确吗? (值是否在范围内),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58327176/