繁体   English   中英

在 JavaScript 中创建两个数字之间的范围

[英]Create a range between two numbers in JavaScript

给定数组的上限 - elementsGroupItemsCount例如,它有 101 个元素。 我将如何随机 select 0-100 范围内的最小值和最大值,其中最小值和最大值相隔 n 个数字,并且需要包含 n 个元素。

例如,如果数字需要包含 6 个元素,则以下是有效的解决方案:

  • 5,10
  • 12,17
  • 19,24

我已经看到了如何在一个范围内生成随机数,但不是相互关联的随机数集。

根据 Bob 的评论,您似乎只需要为您的下限获取一个介于 0 和数组长度(减去所需的跨度)之间的随机数,然后将所需的跨度添加回它以获得上限。 例如

let myArray = [];

for (let i = 0; i<101; i++){
  myArray.push({objectID:i})
}

let requiredSpan = 6;
let lowerBand = Math.floor(Math.random()*(myArray.length-requiredSpan));
let upperBand = lowerBand + requiredSpan-1;

console.log(lowerBand, upperBand);

只是为了在这里以更可重用的方式完成 Mark Taylor 的回答

let myArray = [];

for (let i = 0; i<101; i++){
  myArray.push({objectID:i})
}

const randomMaxMin = max => min => Math.floor(Math.random()*(max-min))
const lowerBand = requiredSpan => length => randomMaxMin(length)(requiredSpan);
const upperBand = requiredSpan => lowerBand => requiredSpan + lowerBand-1;

const getLowerAndUpperBand = requiredSpan => length => {
  const lower = lowerBand(requiredSpan)(length);
  return {
    lower: lower,
    upper: upperBand(requiredSpan)(lower)
  }
}

console.log(getLowerAndUpperBand(6)(myArray.length))

您甚至可以通过选择 requiredSpan 来专门化通用 function

const getLowerAndUpperBandSix = getLowerAndUpperBand(6)
console.log(getLowerAndUpperBandSix(myArray.length))
getNRandomNumbers = (elementsGroupItems,requiredSpan) => {
  var result = []
  var startingValue = elementsGroupItems[0]
  var endingValue = elementsGroupItems[elementsGroupItems.length -1]
  var initialNum = startingValue + Math.floor(Math.random()*(endingValue - requiredSpan))
  for(let i=initialNum; i< (initialNum+requiredSpan); i++){
    result.push(i)
  }
  return result
}

console.log(getNRandomNumbers([1,2,3,4],2)) //example

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM