Здравствуйте, прошу помощи в написании функции. Нужно преобразовать любой симметричный(с однотипными подобъектами) объект в 2-мерный.
Исходные данные:
Объект1 (ПОДАЕТСЯ В КАЧЕСТВЕ АРГУМЕНТА НА ВХОДЕ):
{
'somePage1': {
0: {
'function2': 'getPrice',
item: '0568000085',
line: 6
},
1: {
'function2': 'getCurrency',
item: '066000089',
line: 9
}
},
'somePage2': {
0: {
'function2': 'getPrice',
item: '0568000085',
line: 6
},
1: {
'function2': 'getCurrency',
item: '066000089',
line: 9
}
},
'somePage3': {
0: {
'function2': 'getPrice',
item: '0568000085',
line: 6
},
1: {
'function2': 'getCurrency',
item: '066000089',
line: 9
}
},
'somePage4': {
0: {
'function2': 'getPrice',
item: '0568000085',
line: 6
},
1: {
'function2': 'getCurrency',
item: '066000089',
line: 9
}
}
На выходе он должен выглядеть так:
{
row1:{
key1:somePage1,
key2:0,
function:'getPrice',
item:'0568000085',
line:6
},
row2:{
key1:somePage1,
key2:1,
function:'getCurrency',
item:'066000089',
line:9
},
row3:{
key1:somePage2,
key2:0,
function:'getPrice',
item:'0568000085',
line:6
},
row4:{
key1:somePage2,
key2:1,
function:'getCurrency',
item:'066000089',
line:9
},
и т.д.
}
Нужно что-то вроде
http://jsfiddle.net/mNW2Z/ , только количество строк(rowN) должно равняться сумме всех предпоследних объектов (на фиддле получается только 3 строки).
Также обязательно нужно использовать рекурсию, так как заранее не известно какая глубина вложенности будет у объекта.
Jquery solution - is ok))
Просьба модераторам перенести эту тему в раздел "Общие вопросы".
Можно закрывать тему, сделал сам. Код:
function createTable(){
this.inlineData = {};
this.row = 1;
this.key = 1;
this.inline = function(d, k){
var that = this;
var trigger = 0;
var data = d||this.data;//данные в this.data присваиваются в любом месте кода, находящимся ниже.
var keys = k||{};
$.each(data, function(attr, value){
if(!that.inlineData[that.row]){
that.inlineData[that.row] = {};
}
if(typeof(value) === 'object'){
keys[that.key] = attr;
$.each(keys, function(number, val){
that.inlineData[that.row]['key'+number] = val;
});
that.key++;
that.inline(value, keys);
}else{
trigger = 1;
that.inlineData[that.row][attr] = value;
}
});
that.key--;
if(trigger === 1){
that.row++;
}
}