【问题标题】:assigning a value to a variable from an array with a sorting like conditions将值分配给具有排序条件的数组中的变量
【发布时间】:2015-06-17 00:26:32
【问题描述】:

在下面的代码中,我想将值数组的随机元素分配给值value1value2 我可以这样做,但现在我想确保 value1 低于 value 2。你看“tbsp”比“fl-oz”小,杯子比品脱等小。

function unit(){
   var values = ["tbsp", "fl-oz", "cups", "pint/s", "Quarts" , "Gallon/s"],
   value1 = values[Math.floor(Math.random() * values.length)];
   value2 = values[Math.floor(Math.random() * values.length)]
   if(value1 !== value2){
      return [value1, value2]
   }

}

我正在考虑做一些事情,比如将数组元素变成像var values = [{item : "tbsp" , rank : 1 }, {item : "fl-oz" , rank : 2}, {item : "cups" , rank : 3},这样的对象

【问题讨论】:

  • if (value1 > value2) return [value2, value1]?
  • @Bergi 那行不通。首先,value1value2 是字符串。这也会使函数在某些情况下返回undefined,而不是两个字符串的数组。
  • @PatrickRoberts:哦,对了,他需要对随机生成的索引进行交换。

标签: javascript arrays function sorting


【解决方案1】:

试试这个:

function unit(){
    var values = ["tbsp", "fl-oz", "cups", "pint/s", "Quarts" , "Gallon/s"],
        value1 = Math.floor(Math.random() * (values.length - 1)) + 1,
        value2 = Math.floor(Math.random() * value1);

    return [values[value2], values[value1]];
}

第一个限制1values.length - 1之间的范围,第二个限制0value1 - 1之间的范围。

【讨论】:

  • 感谢您的回答,这对我来说看起来很先进,顺便说一句我做了return [values[value2], values[value1]];,因为值 2 更小,我希望返回数组的第一个元素更小。但它看起来像排序工作,所以谢谢。我仍然不确定这是如何工作的。我知道 Math.random() 从 0-1 得到一个数字。我不知道你所说的“第二个钳位范围在 0 和 value1 - 1 之间”是什么意思。这就是 value2 中的值我没有看到 value1 -1
  • @user2537537 所以基本上value1 保证是15 之间的随机数,因为你的数组长度是6value2 在数学上计算为介于 0value1 - 1 之间的随机数。原因是因为Math.random()从不返回1,它返回一个从0包含到1不包含的随机浮点值。我希望解释有所帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-31
  • 1970-01-01
  • 2014-03-27
  • 2011-06-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多