Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.08.2018, 09:17
Новичок на форуме
Отправить личное сообщение для Dmitriy8804 Посмотреть профиль Найти все сообщения от Dmitriy8804
 
Регистрация: 07.08.2018
Сообщений: 4

Помогите упростить скрипт
Добрый день. Я - начинающий программист. Не пожскажете как сократить такой код. скрипт нужен для вычисления стоимости электромонтажных работ на сайте.


function calcCost(){
//создаем массив, в котором храним данные, в которые ниже присвоим
//стоимость отдельных работ.
var arrResult = ['result1', 'result2', 'result3', 'result4', 'result5',
'result6', 'result7', 'result8', 'result9', 'result10', 'result11',
'result12', 'result13', 'result14', 'result15', 'result16', 'result17',
'result18','result19', 'result20', 'result21', 'result22', 'result23',
'result24', 'result25', 'result26', 'result27', 'result28', 'result29',
'result30']; //создаем массив, в кот. храним все пункты работ
//присваиваем каждому элементу массива элемент из html, умножаем на суму стоимости работы и преобразуем строку в число


arrResult[0] = parseInt(document.getElementById('input1').value * 16);
arrResult[1] = parseInt(document.getElementById('input2').value * 50);
arrResult[2] = parseInt(document.getElementById('input3').value * 11);
arrResult[3] = parseInt(document.getElementById('input4').value * 8);
arrResult[4] = parseInt(document.getElementById('input5').value * 12);
arrResult[5] = parseInt(document.getElementById('input6').value * 7);
arrResult[6] = parseInt(document.getElementById('input7').value * 6);
arrResult[7] = parseInt(document.getElementById('input8').value * 55);
arrResult[8] = parseInt(document.getElementById('input9').value * 38);
arrResult[9] = parseInt(document.getElementById('input10').value * 65);
arrResult[10] = parseInt(document.getElementById('input11').value * 46);
arrResult[11] = parseInt(document.getElementById('input12').value * 36);
arrResult[12] = parseInt(document.getElementById('input13').value * 40);
arrResult[13] = parseInt(document.getElementById('input14').value * 20);
arrResult[14] = parseInt(document.getElementById('input15').value * 40);
arrResult[15] = parseInt(document.getElementById('input16').value * 50);
arrResult[16] = parseInt(document.getElementById('input17').value * 20);
arrResult[17] = parseInt(document.getElementById('input18').value * 300);
arrResult[18] = parseInt(document.getElementById('input19').value * 200);
arrResult[19] = parseInt(document.getElementById('input20').value * 38);
arrResult[20] = parseInt(document.getElementById('input21').value * 48);
arrResult[21] = parseInt(document.getElementById('input22').value * 58);
arrResult[22] = parseInt(document.getElementById('input23').value * 68);
arrResult[23] = parseInt(document.getElementById('input24').value * 75);
arrResult[24] = parseInt(document.getElementById('input25').value * 115);
arrResult[25] = parseInt(document.getElementById('input26').value * 80);
arrResult[26] = parseInt(document.getElementById('input27').value * 100);
arrResult[27] = parseInt(document.getElementById('input28').value * 170);
arrResult[28] = parseInt(document.getElementById('input29').value * 75);
arrResult[29] = parseInt(document.getElementById('input30').value * 90);
arrResult[30] = parseInt(document.getElementById('input31').value * 40);

var resultCommon = arrResult[30] + arrResult[29] + arrResult[28] +
arrResult[27] + arrResult[26] + arrResult[25] + arrResult[24] + arrResult[23] +
arrResult[22] + arrResult[21] + arrResult[20] + arrResult[19] + arrResult[18] +
arrResult[17] + arrResult[16] + arrResult[15] + arrResult[14] + arrResult[13] +
arrResult[12] + arrResult[11] + arrResult[10] + arrResult[9] + arrResult[8] +
arrResult[7] + arrResult[6] + arrResult[5] + arrResult[4] + arrResult[3] +
arrResult[2] + arrResult[1] + arrResult[0];
//складываем все работы

var oi = document.getElementById('out');
oi.textContent = resultCommon + ' ГРИВЕН';
};
Ответить с цитированием
  #2 (permalink)  
Старый 14.08.2018, 09:41
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Вот почитайте

циклы
https://learn.javascript.ru/while-for

forEach
https://developer.mozilla.org/ru/doc.../Array/forEach

reduce
https://developer.mozilla.org/ru/doc...s/Array/Reduce
Ответить с цитированием
  #3 (permalink)  
Старый 14.08.2018, 09:54
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,583

Красиво и аккуратно сделать так: присвоить каждому инпуту единый класс и в аттрибуте каждого инпута хранить множитель, чтобы при добавлении нового или удалении не лезть в код, примерно так:
<input class="cost" type="number" data-multiplier="12">
Далее уже использовать примерно такой код:
var inputs = document.querySelectorAll('.cost'), i = inputs.length, cost = 0;

while(i--) {  
  cost += inputs[i].value * inputs[i].getAttribute('data-multiplier');
}

document.getElementById('out').appendChild(
  document.createTextNode(cost + ' ГРИВЕН')
);
__________________
29375, 35
Ответить с цитированием
  #4 (permalink)  
Старый 14.08.2018, 09:56
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

не заполняя data-multiplier, а заполняя массив
var arr = [16,50,11,8];//заполните сами
document.getElementById('out').textContent = 
arr.reduce((s, el, i) => (document.getElementById('input'+(i+1)).value * el) + s,0)+ ' ГРИВЕН';
Ответить с цитированием
  #5 (permalink)  
Старый 14.08.2018, 10:05
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,583

j0hnik, с массивом быстро данные разайдутся с реальностью, гарантия.)
Если уж юзать массив, то тогда и создание разметки в js переносить надо. (ну или юзать фреймворк который всё это сам свяжет)
__________________
29375, 35
Ответить с цитированием
  #6 (permalink)  
Старый 14.08.2018, 10:06
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Aetae,
да, согласен, данные в кучу!
Ответить с цитированием
  #7 (permalink)  
Старый 14.08.2018, 21:25
Новичок на форуме
Отправить личное сообщение для Dmitriy8804 Посмотреть профиль Найти все сообщения от Dmitriy8804
 
Регистрация: 07.08.2018
Сообщений: 4

он не все будет вводить. все инпуты это виды работ, а конкретнее за вид электромонтажных работ.
Ответить с цитированием
  #8 (permalink)  
Старый 14.08.2018, 21:31
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,583

Dmitriy8804, не принципиально, пустое поле считается нулём:
alert('' * 2)
Если нужна дополнительная валидация - для input type number можно задать step, min и max, не приплетая js.
__________________
29375, 35
Ответить с цитированием
  #9 (permalink)  
Старый 14.08.2018, 21:39
Новичок на форуме
Отправить личное сообщение для Dmitriy8804 Посмотреть профиль Найти все сообщения от Dmitriy8804
 
Регистрация: 07.08.2018
Сообщений: 4

не пойму и не могу найти что такое 'data-multiplier'
Ответить с цитированием
  #10 (permalink)  
Старый 14.08.2018, 22:20
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,583

Dmitriy8804, потому что это я придумал прямо тут.)
https://developer.mozilla.org/ru/doc...ata_attributes
__________________
29375, 35
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите поправить скрипт меню stsepelin Элементы интерфейса 2 30.01.2014 15:11
Помогите доработать скрипт Joannes Общие вопросы Javascript 0 08.09.2013 21:21
Помогите вставить скрипт на страницу alexsio Работа 7 22.04.2013 18:19
Скрипт if помогите пЕньку NeverLux Общие вопросы Javascript 1 06.01.2011 14:33
Люди, помогите адаптировать скрипт под Оперу KiLLk Opera, Safari и др. 1 01.06.2009 01:05