Просмотр полной версии : Логика работы с массивами
Доброго времени суток, посоветуйте пожалуйста что-нибудь по поводу следующей задачи.
Есть массив с материалами:
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))
рони,
Блин, теперь понял что надо было :(
фонарик,
Поправил код, так?
Не совсем. Вот пример сделал того что нужно. Выбираем материал его количество. Затем необходимо получить информацию какое конкретно сырье понадобится и в каком количестве. В каком виде разумнее всего делать не знаю, в виде таблицы их 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>
Ой, рони уже сделал, пойду переваривать :)
Ура, все работает )) Объекты в объектах, сам бы я не разобрался, но конструкцию адаптировал )) Спасибо вам ребята.
vBulletin® v3.6.7, Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot