【问题标题】:Preventing of adding same random values in array防止在数组中添加相同的随机值
【发布时间】:2017-06-02 15:21:05
【问题描述】:

我正在制作一个功能,其中随机索引被添加到带有 for 循环的数组中,值必须始终不同,但有时(大约每 10 个函数调用)有时(大约每 10 个函数调用)相同的值,即使我试图过滤相同的值来自answerId-array 并将其余值 unique-array 和检查过滤unique-array 和原始answerId-array 具有相同的长度,如果unique-arrays 长度低于unique -arrays 长度,answerIds 值将被更改。但是即使answerId-array 中有相同的值,这些数组的长度也总是相同的,并且运行不能传递给其余的 for 循环(那些 for 循环是相当多的 hack 代码)。我做错了什么?对不起,如果我的英语水平不好。

getJSONData(){

  var answerId = [null, null, null, null];
  var length = Object.keys(Company.person).length;

  for(var i = 0; i <= answerId.length - 1; i++){
    answerId[i] = [Math.floor(Math.random() * length)]

  }

  let unique = Array.from(new Set(answerId))
  console.log(unique.length)

  if (unique.length < answerId.length){
    for(var i = 0; i <= answerId.length - 1; i++){
      answerId[i] = [Math.floor(Math.random() * length)]
    }
    console.log("new values 1")
    unique = Array.from(new Set(answerId))

    if (unique.length < answerId.length){
      for(var i = 0; i <= answerId.length - 1; i++){
        answerId[i] = [Math.floor(Math.random() * length)]
      }
      console.log("new values 2")
      unique = Array.from(new Set(answerId))

      if (unique.length < answerId.length){
        for(var i = 0; i <= answerId.length - 1; i++){
          answerId[i] = [Math.floor(Math.random() * length)]
        }
        console.log("new values 3")
        unique = Array.from(new Set(answerId))

        if (unique.length < answerId.length){
          for(var i = 0; i <= answerId.length - 1; i++){
            answerId[i] = [Math.floor(Math.random() * length)]
          }
          console.log("new values 4")
        }
      }
    }
  }

  var personArray = [Company.person[answerId[0]].firstName + ' ' + Company.person[answerId[0]].lastName, Company.person[answerId[1]].firstName + ' ' + Company.person[answerId[1]].lastName, Company.person[answerId[2]].firstName + ' ' + Company.person[answerId[2]].lastName, Company.person[answerId[3]].firstName + ' ' + Company.person[answerId[3]].lastName];
  return personArray;
}

【问题讨论】:

  • 什么是Json-indexesJSON是一个字符串,代表序列化的数据。
  • 如果 Json-mentioning 让某人感到困惑,我从问题中删除了它。
  • 您也可以添加数据。

标签: javascript arrays react-native


【解决方案1】:

据我了解,您想从数组中获取 N 个随机值,值应该是唯一的。您刚刚打乱了数组并从中获取了前 N 个值。

【讨论】:

    【解决方案2】:

    您可以直接使用 Setsize 属性来检查结果集的所需大小。

    var array = [0, 1, 42, 17, 22, 3, 7, 9, 15, 35, 20],
        unique = new Set;
    
    while (unique.size < 4) {
        unique.add(Math.floor(Math.random() * array.length));
    }
    
    console.log([...unique]); // indices

    否则,您可以使用哈希表。

    var array = [0, 1, 42, 17, 22, 3, 7, 9, 15, 35, 20],
        unique = {},
        id = [],
        i;
    
    while (id.length < 4) {
        i = Math.floor(Math.random() * array.length);
        if (!unique[i]) {
            id.push(i);
            unique[i] = true;
        }
    }
    
    console.log(id);

    【讨论】:

    • 我尝试使用 Set-object 但它不起作用,其中有相同的值。 .add 有效,但 .has 无效。我坚信 React-Native 并不完全支持 Set。
    • 大小确实有效。但即使值不是唯一的,它也总是返回 4。
    • 如果第一个不适合你,你可以使用第二个,带有哈希表。
    • 您的第二个示例似乎适用于我的代码。谢谢。
    猜你喜欢
    • 2014-05-06
    • 2021-09-23
    • 1970-01-01
    • 2021-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-05
    相关资源
    最近更新 更多