Боюсь что заголовок составлен
в корне неверно не совсем понятно.
есть два класса объектов:
- record — запись, содержащая в себе имя и значение.
js и скрин из chrome devconsolevar record = function() {
var name;
this.name = name;
var value;
this.value = value;
}
- group — список, содержащий имя, статус и массив записей.
js и скрин из chrome devconsolevar group = function() {
var _name;
this.name = _name;
var _status
this.status = _status;
var _stack = [];
this.stack = _stack;
}
Некоторые группы могут содержать в себе ещё группы, без ограничений на уровень вложенности.
Так же существует корневой элемент
root — представляющий из себя группу нулевого уровня.
Нужно реализовать 2 функции:
- makeRecord — создающая объект класса запись и помещающая его в стек текущего уровня вложенности.
jsvar makeRecord = function(name,value) {
var newrecord = new record();
newrecord.name=name;
newrecord.value=value;
root.stack.push(newrecord);
}
- makeGroup — создающая объект класса группа, помещающая его в стек текущего уровня, и запускающая внутри себя переданную ей функцию, внутри которой могут находиться как новые вызовы makeRecord, так и makeGroup. Самое важное — она должна передавать им ссылку(?) на собственный stack
jsvar makeGroup = function(name,fun) {
var newgroup = new group();
newgroup.name=name;
var stack=[];
try{fun();} catch(e) {
newgroup.status=e;
}
newgroup.status='ok';
newgroup.stack=stack;
root.stack.push(newgroup);
}
Вот с последним у меня как раз проблемы.
Из этого кода:
makeRecord('first record','some text');
makeGroup('first group');
makeRecord('second record','yet another text');
makeGroup('second group',function(){
makeRecord('first record in second group','how can i do it?');
});
Текущая реализация даёт вот такой результат:
{
"name": "root",
"status": "ok",
"stack": [
{
"name": "first record",
"value": "some text"
},
{
"name": "first group",
"status": "ok",
"stack": []
},
{
"name": "second record",
"value": "yet another text"
},
{
"name": "first record in second group",
"value": "how can i do it?"
},
{
"name": "second group",
"status": "ok",
"stack": []
}
]
}
скрин из chrome devconsole
А хочу получить такой:
{
"name": "root",
"status": "ok",
"stack": [
{
"name": "first record",
"value": "some text"
},
{
"name": "first group",
"status": "ok",
"stack": []
},
{
"name": "second group",
"status": "ok",
"stack": [
{
"name": "first record in second group",
"value": "how can i do it?"
}
]
}
]
}
скрин из chrome devconsole
Возможно всё это можно поправить буквально парой строк в makeGroup, а может я выбрал неверный подход в принципе. На всякий случай залил код из примеров
сюда, что бы вам заново не набирать.