【问题标题】:How to check if a generated number already exists如何检查生成的号码是否已经存在
【发布时间】:2019-09-13 16:25:22
【问题描述】:

下面的代码创建了一个随机的客户编号并使用简单的控制台日志将其打印出来,但缺少一个功能:它应该检查之前是否已经生成了相同的客户编号/ID。如果是这样,它应该再次遍历该过程,因此生成一个新的随机数,该随机数是唯一的。我怎么能用这段代码做到这一点?作为一个编程新手,不幸的是我不知道我怎么能做到这一点。也许是一个while循环并将生成的数字存储在一个变量中?如果您可以提供代码,结合我的代码或构建重复检查功能,那将是非常棒的。

    function generateCostumerNum() {

      // generating a random 8-digit number with numbers from 1 to 9
      var zeroToNine = "";
      for (counter = 0; counter <= 7; counter++) {
        var randomNumber = Math.floor(Math.random() * 9) + 1;
        zeroToNine += randomNumber;
      }

      // calculating the cross-sum of the generated number above
      var numberforCrossSum = zeroToNine,
        crossSum = 0;

      while (numberforCrossSum) {
          crossSum += numberforCrossSum % 10;
          numberforCrossSum = Math.floor(numberforCrossSum / 10);
      }

      // building together the final costumer ID string.
      var finalCostumerNum = "ID" + zeroToNine + crossSum;

      console.log(finalCostumerNum);
    };

    generateCostumerNum();

【问题讨论】:

  • 你想如何持久化数据?在数据库中?在客户端上?
  • 对于内存:尝试对象即集合(传统)或集合。否则,将需要某种形式或持久性或一种方法来“以‘保证’唯一性生成”。
  • @daddygames 在客户端使用纯 JavaScript
  • 查找代码以生成 UUID。如果您要随机创建 id 编号,那么再次检查所有以前的 id 就没有什么可做的了,因为好吧,是随机的。但是如果这些没有存储在任何地方,并且只对那个会话有效,那么只需使用一个整数并每次都以客户 ID 1 开头。因此How do you want to persist the data 问题。 customer 这个词让我觉得有钱。如果这是真的,我应该说他做客户端可能是个坏主意。
  • 你了解scope对于JavaScript变量的概念吗?你知道如何使用localStorage吗?你了解如何在 JavaScript 中使用数组吗?即使关闭浏览器或刷新页面,您是否希望客户 ID 保持不变?

标签: javascript loops scope


【解决方案1】:

您可以使用一个简单的while 循环,只要生成的数字已经生成,该循环就会运行:

var already_generated_nums = []; // an array of the numbers already generated
//...
var new_num = generateCostumerNum();

while (already_generated_nums.includes(new_num)) {
    new_num = generateCostumerNum();
}

already_generated_nums.push(new_num);

【讨论】:

  • 非常感谢,我试图把它放在我已经拥有的代码下面,但它给了我一个错误:error: TypeError: undefined is not an object (evaluating 'already_generated_nums.includes')你知道我做错了什么吗,正确的方法是什么?我是否必须重命名函数或设置“num”以外的其他参数?
  • 谢谢。现在它说error: ReferenceError: Can't find variable: num。什么是“num”,它应该是什么/在这种情况下它的作用是什么?
  • @MrFrontend 只是一个错字,请使用.includes(new_num)
  • 啊谢谢你,我想现在它可以工作了。我再次用谷歌搜索 .includes() 方法和 .push() 方法以及它们的工作原理,但我认为代码可以做到这一点。谢谢!!
猜你喜欢
  • 1970-01-01
  • 2020-07-07
  • 1970-01-01
  • 2019-08-21
  • 2019-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多