Я думаю, что наилучшей практикой для использования в этом случае является: при рендеринге html добавьте атрибут к элементу span.
example:
<div class="abc">
<div class="time"><span intime="0305">03:05 NonStop</span></div>
<div class="cost"><label class><span>₹4,976</span><label></div>
</div>
, затем
var timeSlots = $(".master > .abc > .time > span").each(function(i, e){
var time = $(this).attr('intime');
if( parseInt(time) > 0600 && parseInt(time) < 1200)
{
resultArray.push( $(this).val() );
}
};
Вот алгоритм, который я бы использовал для выполнения этой задачи:
Теперь у вас есть шесть случайных чисел с суммой в нужном диапазоне. Возможно, вам просто нужно добавить или вычесть 1 к одному из значений в случае, если при округлении сумма вышла за пределы диапазона. Вы можете выбрать одно из случайных чисел для настройки.
'Create a random number generator.
Dim rng As New Random
'Create a random number in the desired range for the final sum.
Dim sum = rng.Next(120, 235 + 1)
'Generate six proportional values as fractions of 1.0.
Dim proportions = Enumerable.Range(1, 6).Select(Function(n) rng.NextDouble()).ToArray()
'Get the sum of all the proportional values.
Dim proportionsSum = proportions.Sum()
'Normalise the proportional values so that they sum to 1.0
proportions = Array.ConvertAll(proportions, Function(r) r / proportionsSum)
'Break the final sum up into the specified proportions.
Dim numbers = Array.ConvertAll(proportions, Function(r) CInt(Math.Round(r * sum)))
'Adjust as required if rounding has pushed the sum below the minimum value.
Do While numbers.Sum() < 120
'Get a random element index.
Dim index = rng.Next(0, numbers.Length)
'Increment the element at that index.
numbers(index) = numbers(index) + 1
Loop
'Adjust as required if rounding has pushed the sum above the maximum value.
Do While numbers.Sum() > 235
'Get a random element index.
Dim index = rng.Next(0, numbers.Length)
'Decrement the element at that index.
numbers(index) = numbers(index) - 1
Loop
'The numbers array now contains six random values with a sum in the range 120 to 235.
Я бы предложил использовать .Net Случайный класс для генерации случайных чисел. Это также проще в использовании.
Найдите первое случайное число между 0
и минимальным значением, тогда второе случайное число будет в диапазоне: randomMin(MinValue) => (MinValue - randomMin, MaxValue - randomMin)
:
randomMin = rnd1.Next(Min + 1)
randomMax = rnd2.Next(Min - randomMin, Max - randomMin + 1)
result = randomMin + randomMax
К помните, что в классе Random верхний предел является исключительным, поэтому нам нужно добавить 1 к значению Max, чтобы включить его в диапазон случайных значений.
Выполните пример теста:
( В этих примерах кода предполагается, что используемая версия VB.Net - не менее V.14, VS 2015+ )
Private rnd1 As Random = New Random()
Private rnd2 As Random = New Random()
'(...)
Dim Min As Integer = 120
Dim Max As Integer = 235
For i = 0 To 100
Dim randomValues = GetRandomNumbersInRange(Min, Max)
Console.WriteLine($"Random Min: {randomValues.rndMin} Random Max {randomValues.rndMax}")
Console.WriteLine($"Sum: {randomValues.rndMin + randomValues.rndMax}")
Next
'(...)
Private Function GetRandomNumbersInRange(Min As Integer, Max As Integer) As
(rndMin As Integer, rndMax As Integer)
Dim randomMin As Integer = rnd1.Next(Min + 1)
Return (randomMin, rnd2.Next(Min - randomMin, Max - randomMin + 1))
End Function
Если вы хотите, чтобы метод напрямую возвращал сумму, вы можете изменить тип возврата метода следующим образом:
Dim Min As Integer = 120
Dim Max As Integer = 235
For i = 0 To 100
Console.WriteLine(GetSumRandomNumbersInRange(Min, Max))
Next
'(...)
Private Function GetSumRandomNumbersInRange(Min As Integer, Max As Integer) As Integer
Dim randomMin As Integer = rnd1.Next(Min + 1)
Return randomMin + rnd2.Next(Min - randomMin, Max - randomMin + 1)
End Function
Случайные числа также могут быть выбран с:
randomMid(MaxValue - MinValue) => (MinValue, MaxValue - randomMid)
В этом случае, возможно, реализовано как:
Private Function GetSumRandomNumbersInRange2(Min As Integer, Max As Integer) As Integer
Dim randomFirst As Integer = rnd1.Next(Max - Min + 1)
Return randomFirst + rnd2.Next(Min, Max - randomFirst + 1)
End Function