Преобразовать многомерный объект в двумерный
Здравствуйте, прошу помощи в написании функции. Нужно преобразовать любой симметричный(с однотипными подобъектами) объект в 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++; } } |
Часовой пояс GMT +3, время: 15:37. |