Подскажите пожалусто как можно реализовать переобразование из одно мерного обекта в многомерный
{
'key1.key2.key3':'test',
'key1.key3':'value'
}
в такое
{
key1:{
key2:{
key3:'test'
},
key3:'value'
}
}
такое делает nconf модуль npm только с 'key1:key2' на nodejs как повторить его возможности?
Наверное первым делом стоит получить оба объекта из массива:
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;
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
ширина td должна быть равна ширине(высота)InputКак это реализовать? Это что то похожее на электронный журнал
На данный вопрос уже ответили: