javascript - 我的算法正确吗? (值是否在范围内)

标签 javascript algorithm range

我需要判断我的特殊字符串是否在指定范围内?

例子:

// 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/

相关文章:

javascript - 在某些字段中设置异常(exception)

javascript - HTML5 WebSQL 优化/缓存选项?

algorithm - 按距离搜索地理编码信息

c++ - 用STL算法生成一个动态大小的动态容器

algorithm - Kakuro 和 Subset Sum,其中超集包含连续的正整数,子集的大小固定为 k

C 赋值大于数据类型范围

javascript - 在 React 中,如何将元素作为 Prop 和 Render 传递,而不将元素包裹在其周围?

javascript - 该网站获取 "two different scroll speed"的解决方案是什么? (见里面的链接)

java - 数字生成器,但在用户输入的范围内。Java

: how to separate sets with common range into each distinct range 的算法