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
Думаю решение намного более элегантное, но пока я не умею красиво мыслить. Если кто-то заинтересуется и наставит, как справиться то буду очень благодарен)