Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 02.09.2016, 15:49
Интересующийся
Отправить личное сообщение для freelancerphpcss Посмотреть профиль Найти все сообщения от freelancerphpcss
 
Регистрация: 02.07.2013
Сообщений: 19

Как сделать нужную структуру из объекта
У меня есть объект
let object = {
      name: 'color',
      values: [
        {
          id: 'color-red',
          value: 'red'
        },
        {
          id: 'color-blue',
          value: 'blue'
        }
      ],
      labels: {
        one: 'one label',
        two: 'two label'
      }
    };


Из данного объекта хочу сделать вот
let array = [
      {
        id: 0,
        _key: 'name',
        _value: 'color',
        type: 'string',
        childIds: [

        ],
      },
      {
        id: 1,
        _key: 'values',
        _value: false,
        type: 'array',
        childIds: [
          2,
          3
        ],
      },
      {
        id: 2,
        _key: false,
        _value: false,
        type: 'object',
        childIds: [
          4,
          5
        ],
      },
      {
        id: 3,
        _key: false,
        _value: false,
        type: 'object',
        childIds: [
          6,
          7
        ],
      },
      {
        id: 4,
        _key: 'id',
        _value: 'color-red',
        type: 'string',
        childIds: [
        ],
      },
      {
        id: 5,
        _key: 'value',
        _value: 'red',
        type: 'string',
        childIds: [
        ],
      },
      {
        id: 8,
        _key: 'labels',
        _value: false,
        type: object,
        childIds: [
          9,
          10
        ],
      },
      {
        id: 9,
        _key: 'one',
        _value: 'one-label',
        type: 'string',
        childIds: [
        ],
      },
      {
        id: 10,
        _key: 'two',
        _value: 'two-label',
        type: 'string',
        childIds: [
        ],
      }
    ];


Смысл в том что вложенность может быть любая

Сам начал делать вот так
this.renderTree(object, []);

renderTree(object, array) {
		array = Object.keys(object).map(key => {
			if(typeof object[key] == 'object') {
				if(object[key].length == 'undefined') {
					//array
					return this.renderTree(object[key], array);
				} else {
					// object
					return this.renderTree(object[key],array);
				}
			} else {
				return array.push = {
					id: array.length,
					_key: key,
					_value: object[key],
					type: 'string',
					childIds: [],
				}
			}
		});

		console.log(array);
	}


но у меня проблема в том что array не сохраняется в конце, т.е я получаю массив по элементу одному. не понимаю как сделать чтобы array в рекурсию дальше бросать
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как сделать проверку на display: block; ufaclub jQuery 3 22.12.2013 19:21
Canvas. Как сделать или вообще нельзя? Вращение рандомизированно изменяемого объекта. Zemsky Общие вопросы Javascript 30 19.12.2013 19:44
Как сделать калькулятор и с чего начать? A.P. Yellowman Общие вопросы Javascript 3 15.11.2013 21:32
Как сделать, чтобы при наведении на кнопку справа от нее появлялись текстовые ссылки? Tass Общие вопросы Javascript 7 17.02.2011 09:06
Как сделать? При выходе мышкой за пределы окна браузера, начинает грузится другая стр alb Events/DOM/Window 13 01.09.2010 12:19