Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.09.2015, 14:28
Кандидат Javascript-наук
Отправить личное сообщение для фонарик Посмотреть профиль Найти все сообщения от фонарик
 
Регистрация: 23.02.2013
Сообщений: 127

Логика работы с массивами
Доброго времени суток, посоветуйте пожалуйста что-нибудь по поводу следующей задачи.

Есть массив с материалами:
var MATERIALS = ['Красный кирпич', 'Белый кирпич', 'Ракушняк', 'Шлакоблок']

Каждый материал имеет составляющие, допустим:
[Красный кирпич] состоит из [Глина] 10 [Цемент] 5 [Вода] 8
[Белый кирпич] состоит из [Песок] 5 [Цемент] 4 [Вода] 3
и так далее

Задача стоит такая: есть многострочное меню с выбором из массива MATERIALS. Допустим, выбираем 'Красный кирпич' 2шт, 'Белый кирпич' 1шт. Мне нужно получить все входящие в этот выбор составляющие с общим количеством. Т.е чтобы после такого выбора получилось:
Глина 20;
Цемент 14;
Вода 19;

Каким образом нужно построить конструкцию? Если можно, с небольшим примером.
Ответить с цитированием
  #2 (permalink)  
Старый 15.09.2015, 14:35
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

<html>
<head></head>
<body>
<script>
window.onload = function () {
var materials = {
   "Красный кирпич": ["Глина 10", "Цемент 5", "Вода 8"],
   "Белый кирпич": ["Песок 5","Цемент 4","Вода 3"]
}
Object.keys(materials).forEach(function (material) {
   var button = document.createElement('button');
   button.innerHTML = material;
   button.addEventListener('click', function () {
      alert(materials[material]);
      return false;
   }, false);
   document.body.appendChild(button);
});
};
</script>
</body>
</html>

Последний раз редактировалось tsigel, 15.09.2015 в 14:52.
Ответить с цитированием
  #3 (permalink)  
Старый 15.09.2015, 14:41
Кандидат Javascript-наук
Отправить личное сообщение для фонарик Посмотреть профиль Найти все сообщения от фонарик
 
Регистрация: 23.02.2013
Сообщений: 127

tsigel,
а как быть с количественным составляющим?
Ответить с цитированием
  #4 (permalink)  
Старый 15.09.2015, 14:48
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

фонарик,
Ну добавьте циферки к состовляющим. Вообще эту ципочку можно делать и глубже, все что тут надо - это итерировать объект и массив. Отличить объект от массива можно с помощью Array.isArray(some)
Ответить с цитированием
  #5 (permalink)  
Старый 15.09.2015, 14:51
Кандидат Javascript-наук
Отправить личное сообщение для фонарик Посмотреть профиль Найти все сообщения от фонарик
 
Регистрация: 23.02.2013
Сообщений: 127

Чтобы добавить циферки, их надо где-то обозначить, это константа, прилепленная к определенному предмету. Эта часть задачи вызывает наибольшую трудность
Ответить с цитированием
  #6 (permalink)  
Старый 15.09.2015, 14:53
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

фонарик,
Поправил код, так?
Ответить с цитированием
  #7 (permalink)  
Старый 15.09.2015, 15:19
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,130

фонарик,
var materials = {
   "Красный кирпич": {"Глина" : 10, "Цемент" : 5, "Вода" : 8},
   "Белый кирпич": {"Песок" : 5, "Цемент" : 4,"Вода" : 3}
},
total  = {
   "Красный кирпич": 2,
   "Белый кирпич" : 1
}, obj = {};
Object.keys(total).forEach(function (item) {
    var num = total[item];
    Object.keys(materials[item]).forEach(function (component) {
    var sum = materials[item][component] * num
    obj[component] ?  (obj[component] += sum) : (obj[component] = sum)
});
});
alert(JSON.stringify(obj))
Ответить с цитированием
  #8 (permalink)  
Старый 15.09.2015, 15:21
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

рони,
Блин, теперь понял что надо было
Ответить с цитированием
  #9 (permalink)  
Старый 15.09.2015, 15:22
Кандидат Javascript-наук
Отправить личное сообщение для фонарик Посмотреть профиль Найти все сообщения от фонарик
 
Регистрация: 23.02.2013
Сообщений: 127

Сообщение от tsigel Посмотреть сообщение
фонарик,
Поправил код, так?
Не совсем. Вот пример сделал того что нужно. Выбираем материал его количество. Затем необходимо получить информацию какое конкретно сырье понадобится и в каком количестве. В каком виде разумнее всего делать не знаю, в виде таблицы их 2х столбиков или в виде объекта...
<div name='block_01' style="border:1px solid gray; width:250px; height:100px; position:absolute">
<select name="">
  <option value=0></option>
<option value=1>Красный кирпич</option>
<option value=2>Белый кирпич</option>
<option value=3>Ракушняк</option>
<option value=4>Шлакоблок</option>
</select>
<input style="width:50px" name="" type="text" />

<select name="">
  <option value=0></option>
<option value=1>Красный кирпич</option>
<option value=2>Белый кирпич</option>
<option value=3>Ракушняк</option>
<option value=4>Шлакоблок</option>
</select>

<input style="width:50px" name="" type="text" />
<button>Посчитать</button>
</div>
<div name='block_02' style="border:1px solid green; width:250px; height:100px; left:300px; position:absolute">Сюда поместить связку товар + количество</div>

<script>
var MATERIALS = ['Красный кирпич', 'Белый кирпич', 'Ракушняк', 'Шлакоблок']
</script>
Ответить с цитированием
  #10 (permalink)  
Старый 15.09.2015, 15:23
Кандидат Javascript-наук
Отправить личное сообщение для фонарик Посмотреть профиль Найти все сообщения от фонарик
 
Регистрация: 23.02.2013
Сообщений: 127

Ой, рони уже сделал, пойду переваривать
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужен скрипт для работы через Google Script (Spreadsheets) Satmax Работа 0 13.08.2014 16:55
Библиотека для работы с массивами Scribblex Библиотеки/Тулкиты/Фреймворки 1 25.05.2012 17:20
Логика работы ajax-php runekill AJAX и COMET 0 17.03.2010 15:07
Поиск работы JavaScript staff-base Работа 9 12.03.2010 19:06
Модуль для работы с модулями JSprog Ваши сайты и скрипты 29 02.09.2009 13:31