[英]Create a range between two numbers in JavaScript
给定数组的上限 - elementsGroupItemsCount
例如,它有 101 个元素。 我将如何随机 select 0-100 范围内的最小值和最大值,其中最小值和最大值相隔 n 个数字,并且需要包含 n 个元素。
例如,如果数字需要包含 6 个元素,则以下是有效的解决方案:
我已经看到了如何在一个范围内生成随机数,但不是相互关联的随机数集。
根据 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.