09.08.2017, 16:07
|
Профессор
|
|
Регистрация: 04.12.2012
Сообщений: 3,795
|
|
Сообщение от ksa
|
Зачем делать лишние итерации?
|
Размер объекта очень вряд ли когда нибудь перевалит хотя бы за сотню, а что такое пробежаться по сотне свойств во временных затратах?
|
|
09.08.2017, 16:09
|
|
Профессор
|
|
Регистрация: 01.12.2016
Сообщений: 3,650
|
|
Сообщение от Nexus
|
к примеру если ввести отрицательное число, то...
|
То водитель сам приплачивать заказчику должен
|
|
09.08.2017, 16:12
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,228
|
|
Сообщение от Nexus
|
а что такое пробежаться по сотне свойств во временных затратах?
|
Я не сторонник индусских кодов...
Час назад закончил собеседование со студентом магистратуры, ему объяснял те же постулаты.
|
|
09.08.2017, 16:19
|
|
Профессор
|
|
Регистрация: 01.12.2016
Сообщений: 3,650
|
|
biben,
Оставь телефончик, цена перевозок порадовала =)
|
|
09.08.2017, 16:27
|
Профессор
|
|
Регистрация: 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);
});
|
|
10.08.2017, 08:32
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,228
|
|
Сообщение от Nexus
|
Нет гарантии того, что данные будут введены отсортированными, т.е. перед тем, как гонять данные в цикле, нужно будет обязательно отсортировать их
|
Хоть сами элементы массива могут располагаться как угодно (как и ключи) но цикл от 0 до N выберет их в нужной нам последовательности.
Так же у массивов есть метод sort() который так же сможет нам помочь...
Но ты волен остаться при своем мнении, т.к. нас не связывают производственные отношения и я тебе не босс.
|
|
10.08.2017, 09:27
|
Профессор
|
|
Регистрация: 04.12.2012
Сообщений: 3,795
|
|
Сообщение от ksa
|
Хоть сами элементы массива могут располагаться как угодно (как и ключи) но цикл от 0 до N выберет их в нужной нам последовательности.
Так же у массивов есть метод sort() который так же сможет нам помочь...
Но ты волен остаться при своем мнении, т.к. нас не связывают производственные отношения и я тебе не босс.
|
Я имел ввиду, что "нужная нам последовательность" может быть некорректной, т.е. не «1,2,3», а «2,1,3».
Про метод «sort» знаю, но если хранить данные в виде объекта (как я и сделал), то этому методу нужно будет передавать функцию, которая будет сортировать элементы массива.
Если в кач-ве контейнеров для данных использовать 2 массива (как это сделал Джоник), то можно использовать «sort» без функции, но теряется связь «ключ-значение».
Метод «sort», я считаю, в любом случае пробежится по всем элементам объекта для того, чтобы его отсортировать.
Я веду с тобой диалог (спор), поскольку считаю, что в моих словах есть смысл.
В споре, как известно, рождается истина.
Если у тебя нет желания продолжать, то жаль конечно, но ничего не поделаешь.
|
|
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>
|
|
10.08.2017, 10:14
|
Профессор
|
|
Регистрация: 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
}];
|
|
10.08.2017, 10:31
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,228
|
|
Сообщение от Nexus
|
Я веду с тобой диалог (спор), поскольку считаю, что в моих словах есть смысл.
|
Потому и написал, что дело твое как тебе строить алгоритмы...
Свои аргументы я высказал.
|
|
|
|