Показать сообщение отдельно
  #1 (permalink)  
Старый 11.08.2018, 19:06
Новичок на форуме
Отправить личное сообщение для quikki Посмотреть профиль Найти все сообщения от quikki
 
Регистрация: 11.08.2018
Сообщений: 4

Сериализация объекта (точнее даже десериализация).
var objNew = {
    text: {
        subText: {
            value: 'value1'
        },
        modificator: {
            name: 'name1',
            params: 'params1'
        }
    },
    attrs: {
        title: 'title1'
    }
};


obj2 = {
    'text.subText.value': 'value1',
    'text.modificator.name': 'name1',
    'text.modificator.params': 'params1',
    'attrs.title': 'title1'
};


Такая задачка, ребят, что нужно привести obj2 к objNew.

За несколько дней смог добиться некоторых успехов, но не понимаю, как можно реализовать глубину свойств (вложенность).

var obj4 = {};
var keysOfObj = [];
var valueOfObj = [];
var sum = 0;

function funBack(object) {

    //получаю значения свойств и записываю их в качестве элементов масива valueOfObj
    for (var key in object) {
        valueOfObj.push(object[key]);
    }


    //Ключи первоначального объекта записываю в качестве элементов массива keysOfObjWithDots
    var keysOfObjWithDots = [];
    keysOfObjWithDots = Object.getOwnPropertyNames(obj3);
    console.log(keysOfObjWithDots);



    //Ключи первоначального объекта записываю в качестве элементов массива keysOfObj (причём каждый элемент из keysOfObjWithDots представляет отдельный массив)
    for (var key1 = 0; key1 < keysOfObjWithDots.length; key1++) {
        keysOfObj.push(keysOfObjWithDots[key1].split('.'));
    }
    console.log(keysOfObj);


    //В каждый элемент (который является массивом) массива keysOfObj, добавляю последним элементом соответсвующее valueOfObj.
    for (var key2 = 0; key2 < keysOfObj.length; key2++) {
        keysOfObj[key2].push(valueOfObj[sum]);
        sum++;
    }
    //получаем обновлённый keysOfObj, который соответствует первоначальному объекту оформленному в виде массива. 
    console.log(keysOfObj);

    //---------------пытаюсь сделать функцию, которая через рекурсию будет добавлять свойства

    analize(obj4);

    function analize(object) {
        for (var key3 = 0; key3 < keysOfObj.length; key3++) {
            step:
            for (var key4 = 0; key4 < keysOfObj[key3].length; key4++) {
                
                if (!object.hasOwnProperty(keysOfObj[key3][key4]))
                {
                    object[keysOfObj[key3][key4]] = new Object(keysOfObj[key3][key4 + 1]); 
                }

            }


            // Удаляю из объекта каждое последнее свойство, которые были добавлены из многомерного массива keysOfObj, потому что они являются не свойствами, а значениями самых глубоких свойств. сравнить можно с picture1 (на рабочем столе)

            if (object.hasOwnProperty(keysOfObj[key3][keysOfObj[key3].length - 1])) {
                delete object[keysOfObj[key3][keysOfObj[key3].length - 1]];
            }
        }
    }
}
funBack(obj3);


и вот какой результат я получаю: Untitled.jpg

Думаю решение намного более элегантное, но пока я не умею красиво мыслить. Если кто-то заинтересуется и наставит, как справиться то буду очень благодарен)
Ответить с цитированием