LINUX.ORG.RU

Javascript - сгенерировать числа

 ,


0

1

Казалось бы простой вопрос, не могу найти решения.

Нужно сгенерировать числа на основе результата (ввиде числа).

К примеру, я в js получаю результат, число 100.

Далее мне нужно сгенерировать такие числа: 100, 200, 300, 400.

Где 400 это максимальное число. (100 - 400)

Ответ на: комментарий от dataman

Как сюда добавить результат и получить диапазон до максимального числа ?

for(var i = 0; i < 100; i++){

console.log(i);

}

nixbrain
() автор топика
Последнее исправление: nixbrain (всего исправлений: 2)
Ответ на: комментарий от nixbrain

Если я правильно понял, а я не уверен в этом, то:

function clamp_range(start,end)
{
    for(var i = start; i < end+start; i+=start)
    {
        console.log(i);
    }
}

clamp_range(100,400)
dron@gnu:~/Рабочий-стол$ cjs test.js 
Cjs-Console-Message: 19:41:50.337: 100
Cjs-Console-Message: 19:41:50.337: 200
Cjs-Console-Message: 19:41:50.337: 300
Cjs-Console-Message: 19:41:50.338: 400
dron@gnu:~/Рабочий-стол$ 

По абстрактному описанию тебе нужен диапазон от X до Y с шагом X.

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

Да, это примерно то что нужно.

Я пытаюсь сделать вот что.

У меня есть два селекта с ценами.

Селект 1 - это минимальная цена Селект 2 - это максимальная цена

Когда я выбираю цену в селекте 1, допустим, 400, то при выборе, в селект 2 генерируются теги options со значениями, 400, 500, 600 и так до 5000 к примеру.

То есть селект 1 - главный, в нем цены могут быть любые, а вот селект 2, уже как максимальный орьентир цен - получается.

Сначала я думал сделать слайдер, но передумал из многих факторов.

В итоге решил сделать 2 селекта.

nixbrain
() автор топика
Ответ на: комментарий от nixbrain

В итоге решил сделать 2 селекта.

  • Возьмём 2 или 3 ?
  • Вчера взяли 3 - одна осталась! Продавщице:
  • 4 бутылки водки и 2 ириски

(с) Ю. Никулин.

anonymous
()
Ответ на: комментарий от nixbrain

Ну если шаг не является начальным значением то ещё проще

function clamp_range(start,end,step)
{
    for(var i = start; i < end; i+=step)
    {
        console.log(i)
    }
    console.log(end)
}

clamp_range(400,1000,100)

А если у тебя options по количеству фиксированные, например их всегда 5 и диапазон нужно уместить в них, то

function clamp_range(start,end,num)
{
    var step = Math.floor((end-start) / (num-1))
    for(var i = start; i < end; i+=step)
    {
        console.log(i);
    }
    console.log(end)
}

clamp_range(400,1000,5)
LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

Вышло примерно так:

function clamp_range(start)
{
for(var i = start; i <= 5000; i+=100)
{
console.log(i);
}
}
clamp_range(200)

Результат:

200
300
400
500

Задача номер два

Сделать чтобы было

200
1000
2000
3000
4000
5000
nixbrain
() автор топика
Ответ на: комментарий от nixbrain

Задача номер два

У тебя нет никакой логики в том что со 100 до 400 шаг 100. А с 200 до 1000 шаг 800, а потом 1000. Это какая-то твоя внутренняя кухня и не является технической задачей. Если у тебя эти вещи не вычислимые, а данные, то сделай ассоциативный массив в котором прописаны начальные цены, а внутри него массив с диапазонами цен. И не надо ничего считать будет и циклы гонять, всё фиксировано и на 100% предсказуемо.

Ладна, я пшёл, дальше сами развалекайтесь :D

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от nixbrain

селект 1 - главный, в нем цены могут быть любые, а вот селект 2, уже как максимальный орьентир цен - получается.

''' 200 1000 2000 3000 4000 5000 '''

вот на эти 2 процента и живу )

anonymous
()
Ответ на: комментарий от LINUX-ORG-RU

А ты понял вообще общую суть работы селектов ?

Логика простая, в первом селекте идут цены - мелкие, если пользователь хочет выбрать между диапазоном, тогда при выборе мелкой цены, второй селект генерирует цены от выбранной и выше.

Естественно, второй селект опирается на начальную цену пользователя и максимальную цену товара/продукта

nixbrain
() автор топика
Ответ на: комментарий от Nervous

Слайдер красиво, но я понял что это будет как минимум неудобно, особенно если кто-то будет заходить с телефона. Тем более не такой детализации цен. У меня же проще простого, начальные цены которых больше всего и второй селект если нужен диапазон от мелких до больших-максимальных.

nixbrain
() автор топика
Ответ на: комментарий от nixbrain

Я как пользователь не хочу эту многоступенчатость, у меня есть X денег, но со скрипом готов на X+2копейки. И хочу просто указать две цены, минимальную которую я копил пол года и максимальную которую я смогу выдавить из себя если буду потом экономить на еде и чтобы мне просто выплюнуло всё что между ними. Мне как пользователю проще, и тебе тоже проще


   if(price >= min && price <= max)
   {
       показать(товар)
   }

Ну или селект в базу с той же логиков и всё.
Делай как знаешь, я лишь высказал.

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

Всё так и работает.

Выводится строго между двух чисел включая сами числа (2 числа из селекта)

Тут дело не в выводе, а во втором селекте, где нужно генерировать опции отталкиваясь от первого. И нужно генерировать так чтобы разница была не огромная, а что-то между.

Зачем выводить 100 опций, если можно вывести 50 )

nixbrain
() автор топика
Последнее исправление: nixbrain (всего исправлений: 2)
Ответ на: комментарий от LINUX-ORG-RU

А если у тебя options по количеству фиксированные, например их всегда 5 и диапазон нужно уместить в них, то

Тут у тебя ошибка вышла, мы генерируем options которые находятся в select. Оptions содержат значения цен. Если у нас в списке (селекте) 50 штук цен, то и options у нас тоже будет 50 штук

nixbrain
() автор топика
Ответ на: комментарий от nixbrain

ты какую-то шизу придумал. на сайтах типа озона есть ползунок с минимальной и максимальными ценами, где минимальная и максимальная выбираются из базы, а так же цену можно задать вводя цифры эти в два поля

rtxtxtrx ★★★
()
Ответ на: комментарий от rtxtxtrx

Да что ВЫ говорите, у меня точно так же всё работало :) хоть ползунком хоть в поля вводи, кроме выборки цен из базы, потому что я во первых не Озон или огромная площадка которая может позволить себе многое ) в том числе и обрабатывать многочисленные запросы пользователей одного лишь поиска )

nixbrain
() автор топика
Ответ на: комментарий от vbr

Хорошая шутка, но, нет.

Вся логика опирается на стартовое значение.

А тут статика, вдруг прилетит 400, тогда какой будет результат ? : )

Тем более второй селект отталкивается от результата первого и генерирует прилетевший и последующие варианты.

Что я тут придумал ? Это работает проще любого слайдера или какого-то альтернативного варианта, проще это вообще 2 текстовых поля с вводом цены вручную )

nixbrain
() автор топика
Ответ на: комментарий от nixbrain

Сделал то что требовалось.

В итоге 1 условие и 1 цикл.

1 селект - если выбрана цена до 1000, тогда в селекте 2 генерируем текущую цену + 100, если пользователь выбрал 1000, то во втором селекте генерируем от текущей и к последующим прибавляем 1000 !

Таким образом получается так, что до 1000 можно генерировать мелкие цены, а от 1000 уже прибавляем 1000 чтобы увеличить возможность ценового охвата, типа 1000 и 1000 или 1000 и 2000, а у мелких выходит типа 100 и 500 или 200 и 800

nixbrain
() автор топика
Последнее исправление: nixbrain (всего исправлений: 1)
Ответ на: комментарий от vbr

Вот простая задача

Селект 1 - 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000

А теперь сделай так, чтобы при выборе к примеру числа 300, во втором селекте генерировались числа

300, 350, 400, 450, 500 … 950, 1000.

Далее скажу что нужно если в селекте 1 юзер выберет 1000 !

То во втором селекте уже будет не 50 увеличение, а на 1000, к примеру от 1000 до 5000 тыс. Типа, 1000, 2000, 3000, 4000, 5000.

nixbrain
() автор топика
Ответ на: комментарий от nixbrain

Поскольку закономерности в твоих примерах я по прежнему не уловил, порекомендую такой вариант:

function generate(n) {
  switch (n) {
    case 100: return [100, 200, 300, 400];
    case 300: return [300, 350, 400, 450, 500 … 950, 1000];
    case 1000: return [1000, 2000, 3000, 4000, 5000];
  }
}

Остальные case заполни по своему разумению. Потом попробуем уловить закономерность, может она и есть, как знать…

vbr ★★★★★
()
Последнее исправление: vbr (всего исправлений: 5)
Ответ на: комментарий от vbr

Закономерность ты не уловил, потому что ты не не понял саму задачу.

Приведу пример ещё проще, вот пользователь выбрал в первом селекте, 500, во втором сгенерился результат.

500 | 600
    | 700
    | 800
    | 900
    | 1000

Пользователь выбрал 1000

1000 | 2000
     | 3000
     | 4000
     | 5000

Твоё решение слишком громоздкое для такой простой задачи, потому что неужели мне нужно под каждые цифры мануально прописывать значения ? ) Если я могу решить задачу 3 переменными, 1 условием и 1 циклом.

nixbrain
() автор топика
Ответ на: комментарий от nixbrain

Так ты её не объяснил, конечно я её не понял. Почему для 100 у тебя генерируются [100, 200, 300, 400], а для 1000 у тебя генерируются [1000, 2000, 3000, 4000, 5000]? Почему для 300 шаг 50, а для 100 и 500 шаг 100? Загадка!

vbr ★★★★★
()
Ответ на: комментарий от vbr

Потому что сначала идёт вариант с мелкими ценами, а потом если юзер решил замахнуться и раскошелиться, тогда предлагаем ему вариант диапазона с в разницу о д н а - т ы с я ч а.

nixbrain
() автор топика
Последнее исправление: nixbrain (всего исправлений: 1)

Казалось бы простой вопрос, не могу найти решения.

НЯ!

<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Умножение чисел</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            max-width: 600px;
            margin: 0 auto;
            padding: 20px;
        }
        input, button {
            padding: 8px;
            margin: 5px 0;
        }
        table {
            width: 100%;
            border-collapse: collapse;
            margin-top: 20px;
        }
        th, td {
            border: 1px solid #ddd;
            padding: 8px;
            text-align: center;
        }
        th {
            background-color: #f2f2f2;
        }
        .error {
            color: red;
            margin-top: 10px;
        }
    </style>
</head>
<body>
    <h1>Умножение числа</h1>
    <p>Введите число, и оно будет умножено на 1, 2, 3, 4:</p>
    
    <input type="text" id="numberInput" placeholder="Введите число">
    <button onclick="calculate()">Рассчитать</button>
    
    <div id="error" class="error"></div>
    
    <table id="resultsTable">
        <thead>
            <tr>
                <th>Множитель</th>
                <th>Результат</th>
            </tr>
        </thead>
        <tbody id="tableBody">
            <!-- Результаты будут здесь -->
        </tbody>
    </table>

    <script>
        function calculate() {
            const input = document.getElementById('numberInput').value;
            const errorElement = document.getElementById('error');
            const tableBody = document.getElementById('tableBody');
            
            // Очищаем предыдущие результаты и ошибки
            errorElement.textContent = '';
            tableBody.innerHTML = '';
            
            // Проверяем, что введено число
            if (input === '' || isNaN(input)) {
                errorElement.textContent = 'Пожалуйста, введите корректное число!';
                return;
            }
            
            const number = parseFloat(input);
            
            // Умножаем число на 1, 2, 3, 4 и добавляем в таблицу
            for (let i = 1; i <= 4; i++) {
                const result = number * i;
                
                const row = document.createElement('tr');
                
                const multiplierCell = document.createElement('td');
                multiplierCell.textContent = i;
                
                const resultCell = document.createElement('td');
                resultCell.textContent = result;
                
                row.appendChild(multiplierCell);
                row.appendChild(resultCell);
                
                tableBody.appendChild(row);
            }
        }
        
        // Добавляем обработчик нажатия Enter в поле ввода
        document.getElementById('numberInput').addEventListener('keypress', function(e) {
            if (e.key === 'Enter') {
                calculate();
            }
        });
    </script>
</body>
</html>
Ygor ★★★★★
()
Последнее исправление: Ygor (всего исправлений: 1)
Ответ на: комментарий от Ygor

Это что рандомный калькулятор ? У меня решение на js вышло в 3 переменных, одно условие и сам цикл который генерирует диапазон исходя из полученного результата

nixbrain
() автор топика