Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   мини калькулятор (https://javascript.ru/forum/jquery/70092-mini-kalkulyator.html)

Nexus 10.08.2017 12:11

Цитата:

Сообщение от рони (Сообщение 461211)
Nexus,
думаю всем сейчас понятно, что массив должен быть от сортирован перед использованием, только это было основной мыслью, моего послания.

В идеале да, должен быть отсортирован, но бывает всякое.
Если с проектом работает несколько человек, то энный программист может "скормить" скрипту неотсортированный список.

Спасибо.

рони 10.08.2017 12:27

Цитата:

Сообщение от Nexus
то энный программист может "скормить" скрипту неотсортированный список.

ок :)
Цитата:

Сообщение от ksa
и потом "мужественно преодолеваешь препятствия".

вариант с неотсортированным массивом
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
  <script>
$(function() {
    $("#process_all_b").click(function() {
        var d = [{
                value: 2000,
                ratio: 1.3
            }, {
                value: 5000,
                ratio: 1
            }, {
                value: 30000,
                ratio: .8
            }, {
                value: 0,
                ratio: 1.5
            }],
            a = +$("#count_inp").val() || 0,
            b = "Укажите расстояние";
        a && d.sort(function(a,b) {
  return b.value - a.value
}).some(function(c) {
            return a > c.value && (b = (a * c.ratio).toFixed(2) + " Рублей")
        });
        $("#result p").html(b)
    })
});
    </script>
</head>

<body>


<div id="calc_div">

    <div id="quantity_div"><p class="c">
        Сколько километров </p>
        <input type="text" id="count_inp"><br>
    </div>

    <div id="final_div">
        <p class="c"><button id="process_all_b" >Посчитать</button><br></p>
        <div id="result"><p class="c">0 Рублей</p></div>
    </div>
</div>

</body>
</html>

рони 10.08.2017 12:29

laimas,
да разбирается конкретный случай, в котором сортировка массива необходима.

j0hnik 10.08.2017 12:48

<html>
<head>
</head>
<body>
	<div id="calc_div">

		<div id="quantity_div"><p class="c">
			Сколько километров <br>
			<input type="text" id="count_inp" value="0"><br>
		</div>

		<div id="final_div">
			<p class="c"><button id="process_all_b" >Посчитать</button><br></p>
			<div id="result"><p class="c">Укажите расстояние</p></div>
		</div>
	</div>
	<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
	<script>
			$("#process_all_b").click(function(){
				var sum = $("#count_inp").val(), arr = [[30000,0.8],[5000,1],[2000,1.3],[0,1.5]];
				sum *= arr.find(el => el[0] <= sum)[1];
				$("#result p").html(sum.toFixed(0)+' Рублей');
			});
	</script>
</body>
</html>

Nexus 10.08.2017 13:11

Цитата:

Сообщение от рони
вариант с неотсортированным массивом

В этом случае ты сначала сортируешь массив данных (как минимум 1 раз проходишь его полностью в цикле) и только потом ищешь в цикле необходимый коэф. цены.
Не лучше ли было бы просто единожды полностью пройтись по этому массиву данных? (см. пост №25)

Обсуждение по второму кругу пошло, давайте заканчивать.
Тут решение задачи уже на все случаи жизни найдется.


Часовой пояс GMT +3, время: 07:02.