Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 09.08.2017, 16:07
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,795

Сообщение от ksa Посмотреть сообщение
Зачем делать лишние итерации?
Размер объекта очень вряд ли когда нибудь перевалит хотя бы за сотню, а что такое пробежаться по сотне свойств во временных затратах?
Ответить с цитированием
  #22 (permalink)  
Старый 09.08.2017, 16:09
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Сообщение от Nexus Посмотреть сообщение
к примеру если ввести отрицательное число, то...
То водитель сам приплачивать заказчику должен
Ответить с цитированием
  #23 (permalink)  
Старый 09.08.2017, 16:12
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от Nexus
а что такое пробежаться по сотне свойств во временных затратах?
Я не сторонник индусских кодов...

Час назад закончил собеседование со студентом магистратуры, ему объяснял те же постулаты.
Ответить с цитированием
  #24 (permalink)  
Старый 09.08.2017, 16:19
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

biben,
Оставь телефончик, цена перевозок порадовала =)
Ответить с цитированием
  #25 (permalink)  
Старый 09.08.2017, 16:27
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,795

Сообщение от ksa Посмотреть сообщение
Я не сторонник индусских кодов...

Час назад закончил собеседование со студентом магистратуры, ему объяснял те же постулаты.
Ок, не спорю, лишние итерации - не хорошо, но вот вопрос:
Нет гарантии того, что данные будут введены отсортированными, т.е. перед тем, как гонять данные в цикле, нужно будет обязательно отсортировать их, а это в любом случае придется пробежаться по всему объекту данных (typeof []=='object'). Т.е. в этом случае нам нужно будет аж 2 раза в цикле работать с массивом данных.
Что более индусский код, два раза гонять в цикле один и тот же объект или сделать это единожды?

$(function(){
	function count(){
		var data={
				0:2,
				2000:1.5,
				5000:1.3,
				30000:1
			},
			sum=+$("#count_inp").val() || 0,
			last_v=-999999,
			result=false;
		
		for(var val in data){
			if(data.hasOwnProperty(val) && sum>=val && last_v<val){
				result=data[val]*sum;
				last_v=val;
			};
		};
		
		$("#result p").html(result===false?'Укажите расстояние':result+' Рублей');
	};
	
	$("#process_all_b").click(count);
});
Ответить с цитированием
  #26 (permalink)  
Старый 10.08.2017, 08:32
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от Nexus
Нет гарантии того, что данные будут введены отсортированными, т.е. перед тем, как гонять данные в цикле, нужно будет обязательно отсортировать их
Хоть сами элементы массива могут располагаться как угодно (как и ключи) но цикл от 0 до N выберет их в нужной нам последовательности.
Так же у массивов есть метод sort() который так же сможет нам помочь...

Но ты волен остаться при своем мнении, т.к. нас не связывают производственные отношения и я тебе не босс.
Ответить с цитированием
  #27 (permalink)  
Старый 10.08.2017, 09:27
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,795

Сообщение от ksa Посмотреть сообщение
Хоть сами элементы массива могут располагаться как угодно (как и ключи) но цикл от 0 до N выберет их в нужной нам последовательности.
Так же у массивов есть метод sort() который так же сможет нам помочь...

Но ты волен остаться при своем мнении, т.к. нас не связывают производственные отношения и я тебе не босс.
Я имел ввиду, что "нужная нам последовательность" может быть некорректной, т.е. не «1,2,3», а «2,1,3».
Про метод «sort» знаю, но если хранить данные в виде объекта (как я и сделал), то этому методу нужно будет передавать функцию, которая будет сортировать элементы массива.
Если в кач-ве контейнеров для данных использовать 2 массива (как это сделал Джоник), то можно использовать «sort» без функции, но теряется связь «ключ-значение».
Метод «sort», я считаю, в любом случае пробежится по всем элементам объекта для того, чтобы его отсортировать.

Я веду с тобой диалог (спор), поскольку считаю, что в моих словах есть смысл.
В споре, как известно, рождается истина.
Если у тебя нет желания продолжать, то жаль конечно, но ничего не поделаешь.
Ответить с цитированием
  #28 (permalink)  
Старый 10.08.2017, 10:04
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

вариант предложенный ksa, напомню some остановит цикл на первом правильном результате ...

<!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: 30000,
                ratio: .8
            }, {
                value: 5000,
                ratio: 1
            }, {
                value: 2000,
                ratio: 1.3
            }, {
                value: 0,
                ratio: 1.5
            }],
            a = +$("#count_inp").val() || 0,
            b = "Укажите расстояние";
        a && d.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>
Ответить с цитированием
  #29 (permalink)  
Старый 10.08.2017, 10:14
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,795

Сообщение от Nexus
Я имел ввиду, что "нужная нам последовательность" может быть некорректной, т.е. не «1,2,3», а «2,1,3».
На примере рони, если переменную «d» задать так и ввести в поле 2500, то результат будет неверным:
var d = [{
                value: 30000,
                ratio: 1
            }, {
                value: 5000,
                ratio: 1.3
            }, {
                value: 0,
                ratio: 2
            }, {
                value: 2000,
                ratio: 1.5
            }];
Ответить с цитированием
  #30 (permalink)  
Старый 10.08.2017, 10:31
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от Nexus
Я веду с тобой диалог (спор), поскольку считаю, что в моих словах есть смысл.
Потому и написал, что дело твое как тебе строить алгоритмы...
Свои аргументы я высказал.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Заставить калькулятор считать дробные числа с запятой. webmanss Элементы интерфейса 3 10.03.2016 16:07
Калькулятор услуг tarantino Javascript под браузер 1 30.07.2015 00:21
Не работает Калькулятор просчета отопления igor700 Общие вопросы Javascript 5 26.02.2014 16:18
Кредитный калькулятор kurya4iy Общие вопросы Javascript 4 11.05.2013 23:09
Сделать калькулятор на сайт. asderru Работа 1 22.07.2010 13:46