Логика работы с массивами
Доброго времени суток, посоветуйте пожалуйста что-нибудь по поводу следующей задачи.
Есть массив с материалами: var MATERIALS = ['Красный кирпич', 'Белый кирпич', 'Ракушняк', 'Шлакоблок'] Каждый материал имеет составляющие, допустим: [Красный кирпич] состоит из [Глина] 10 [Цемент] 5 [Вода] 8 [Белый кирпич] состоит из [Песок] 5 [Цемент] 4 [Вода] 3 и так далее Задача стоит такая: есть многострочное меню с выбором из массива MATERIALS. Допустим, выбираем 'Красный кирпич' 2шт, 'Белый кирпич' 1шт. Мне нужно получить все входящие в этот выбор составляющие с общим количеством. Т.е чтобы после такого выбора получилось: Глина 20; Цемент 14; Вода 19; Каким образом нужно построить конструкцию? Если можно, с небольшим примером. |
<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,
а как быть с количественным составляющим? |
фонарик,
Ну добавьте циферки к состовляющим. Вообще эту ципочку можно делать и глубже, все что тут надо - это итерировать объект и массив. Отличить объект от массива можно с помощью Array.isArray(some) |
Чтобы добавить циферки, их надо где-то обозначить, это константа, прилепленная к определенному предмету. Эта часть задачи вызывает наибольшую трудность :(
|
фонарик,
Поправил код, так? |
фонарик,
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)) |
рони,
Блин, теперь понял что надо было :( |
Цитата:
<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> |
Ой, рони уже сделал, пойду переваривать :)
|
Часовой пояс GMT +3, время: 05:49. |