Парсинг строки key.key2 в много мерный object

158
07 февраля 2018, 14:26

Подскажите пожалусто как можно реализовать переобразование из одно мерного обекта в многомерный

{
 'key1.key2.key3':'test',
 'key1.key3':'value'
}

в такое

{
    key1:{
        key2:{
            key3:'test'
        },
        key3:'value'
    }
}

такое делает nconf модуль npm только с 'key1:key2' на nodejs как повторить его возможности?

Answer 1

Наверное первым делом стоит получить оба объекта из массива:

    function parse(key, value) { 
    	var split = key.split("."); 
    	var object = {}; 
    	 
    	//object[split[0]] = (split.length > 1) ? parse(split.slice(1).join("."), value) : value; 
    	 
    	if(split.length > 1) { 
    		object[split[0]] = parse(split.slice(1).join("."), value); 
    	} 
    	else { 
    		object[split[0]] = value; 
    	} 
    	 
    	return object; 
    } 
 
    var json = { 
     'key1.key2.key3':'test', 
     'key1.key3':'value' 
    }; 
 
 
    for(var key in json) { 
      console.log(parse(key, json[key])); 
    }

А дальше скрестить объекты

var json = { 
 'key1.key2.key3':'test', 
 'key1.key3':'value' 
}; 
 
var objectMerge = []; 
 
for(var key in json) { 
	objectMerge.push(parse(key, json[key])); 
} 
 
console.log(merge(...objectMerge)); 
 
function merge() { 
	var object = {}; 
	 
	for(var i=0; i < arguments.length; i++) { 
		for(var key in arguments[i]) { 
			if(typeof arguments[i][key] == "string") { 
				object[key] = arguments[i][key]; 
			} 
			else { 
				object[key] = Object.assign({}, object[key], merge(arguments[i][key])); 
			} 
		} 
	} 
	 
	return object; 
} 
 
 
function parse(key, value) { 
	var split = key.split("."); 
	var object = {}; 
	 
	//object[split[0]] = (split.length > 1) ? parse(split.slice(1).join("."), value) : value; 
	 
	if(split.length > 1) { 
		object[split[0]] = parse(split.slice(1).join("."), value); 
	} 
	else { 
		object[split[0]] = value; 
	} 
	 
	return object; 
}

READ ALSO
Высота(ширина) трансформированного input type date берется за ширину ячейки в таблице. Как сузить ширину ячейки?

Высота(ширина) трансформированного input type date берется за ширину ячейки в таблице. Как сузить ширину ячейки?

ширина td должна быть равна ширине(высота)InputКак это реализовать? Это что то похожее на электронный журнал

149
Как отслеживать изменение класса

Как отслеживать изменение класса

Добры день есть такая задачка, с такой разметкой

163
php call user func, для переменных

php call user func, для переменных

Есть простой класс:

180