Логика работы с массивами
Доброго времени суток, посоветуйте пожалуйста что-нибудь по поводу следующей задачи.
Есть массив с материалами: 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, время: 04:31. |