Показать сообщение отдельно
  #1 (permalink)  
Старый 01.03.2017, 08:02
Профессор
Отправить личное сообщение для Роман Андреевич Посмотреть профиль Найти все сообщения от Роман Андреевич
 
Регистрация: 12.08.2016
Сообщений: 299

Проверка и добавление значений
Всем доброго времени суток, есть код:
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<script>
		var zero_status = false, // статус, если какие то компоненты = 0
			incomplite_status = false, // статус, если можно приготовить не все рецепты
			ready_status = false; // статус, если все ок

		function Machine(water, tea, mlik, sugar, caps) {

			var empty_conponents = [],
				components = {
					water: {
						value: 0
					},
					tea: {
						value: 0
					},
					milk: {
						value: 0
					},
					sugar: {
						value: 0
					},
					caps: {
						value: 0				
					}
				},
				recipes = {
					green: {
						water: 150,
						tea: 16,
						milk: 30,
					},
					black: {
						water: 150,
						tea: 15,
						milk: 30,
					},
					gray: {
						water: 150,
						tea: 15,
						milk: 30,
					},
					orange: {
						water: 150,
						tea: 15,
						milk: 31,
					}
				}

			function ready() {
				check(); // проверка компонентов
				console.log(zero_status);
				console.log(incomplite_status);
				if (!zero_status) {
					if (incomplite_status && ready_status) {
						console.log('Можно готовить. Но не все. Нужно добавить: ' + empty_conponents);
						for (var key in components) {
							console.log(components[key].value);
						}
						setTimeout(function() {
							addComponents(empty_conponents);							
						}, 2000);
					} else if (!incomplite_status && ready_status) {
						console.log('Все компоненты в норме. Можно готовить.');
						for (var key in components) {
							console.log(components[key].value);
						}
					}
				} else if (zero_status) {
						console.log('Готовить нельзя. Нужно добавить некоторые компоненты.');
						for (var key in components) {
							console.log(components[key].value);
						}
						setTimeout(function() {
							addComponents(empty_conponents);
						}, 2000);
				}				
			}

			this.ready = function() {ready();}

			function addComponents(arr) {
				var some = {},
					parts = [],
					x = 0;

				empty_conponents.forEach(function(item,i, arr) {
					switch (item) {
						case 'water': 
							other = {
								title: 'воды',
								parent: water
							}
							break;
						case 'tea': 
							other = {
								title: 'чая',
								parent: tea
							}
							break;
						case 'sugar':
							other = {
								title: 'сахара',
								parent: sugar
							}
							break;
						case 'milk':
							other = {
								title: 'молока',
								parent: milk
							}
							break;
						case 'caps': 
							other = {
								title: 'чашек',
								parent: caps
							}
							break;
						default: return;
					}
					var items = +prompt('Сколько добавить ' + other.title, 'Не более ' + other.parent + '');
					if (items <= 0 || isNaN(items) || items > other.parent) {
						return;
					} else parts.push(items);
				});

				for (var key in components) {
					if (zero_status && !incomplite_status) {
						if (components[key].value === 0) {
							components[key].value += parts[x++];
						}
					} else if (!zero_status && incomplite_status) {
						if (components[key].value < parts[x]) {
							components[key].value += parts[x++];
						}
					}
				}
				if (zero_status) zero_status = false;
				if (incomplite_status) incomplite_status = false;
				empty_conponents.splice(0, empty_conponents.length);
				ready();
			}

			this.setComponents = function(water, tea, mlik, sugar, caps) {
				components.water.value += water;
				components.tea.value += tea;
				components.milk.value += mlik;
				components.sugar.value += sugar;
				components.caps.value += caps;			
			}

			function check() {
		    	// проверяем компоненты машины, которые = 0
				for (var key in components) {
					if (components[key].value <= 0) {
						components[key].value = 0;
						zero_status = true;
						empty_conponents.push(key);
					}
				}
				// если все компоненты > 0 проверяем рецепты, нет zero_status
				if (!zero_status) {
					// проверяем возможность приготовления рецептов
					for (var key in recipes) {
						for (var i in recipes[key]) {
							if (recipes[key][i] > components[i].value) {
								incomplite_status = true;
								empty_conponents.push(i);
							}
						}
					}
				}
				if (empty_conponents.length != 0 && !zero_status) {
					empty_conponents = unique(empty_conponents);
					ready_status = true;
				} else if (empty_conponents.length == 0 && !zero_status && !incomplite_status) {
					ready_status = true;
				}
			}

	    	function unique(arr) {
				var obj = {};
				for (var i = 0; i < arr.length; i++) {
					var str = arr[i];
					obj[str] = true;
				}
				return Object.keys(obj);			
			}

		}

		var mach = new Machine(1800,250,400,100,20);
		mach.setComponents(0,15,400,1,20);
		mach.ready();
	</script>
</body>
</html>

Суть я думаю понятна. Вопрос в том, как сделать что бы с prompt введенные данные прибавлялись куда нужно.
Ответить с цитированием