04.03.2015, 17:05
|
Новичок на форуме
|
|
Регистрация: 04.03.2015
Сообщений: 2
|
|
Помогите решить в JS. (Решено)
Преобразовать заданный объект в новый объект, в котором ключи надо разбить на секции символом ".". Количество секций не ограничено. РЕШЕНО
Задан объект:
var obj = {
"database.host": "127.0.0.1",
"database.user": "test",
"database.password": "qwerty",
"rest.photo.host": "127.0.0.2",
"rest.users.host": "127.0.0.3",
"rest.users.password": "p@ssw0rd",
"baseUrl": "test.com",
"limit": 10
};
Последний раз редактировалось dumspiro, 05.03.2015 в 19:15.
|
|
05.03.2015, 09:05
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,215
|
|
Сообщение от dumspiro
|
Займет 5 мин.
|
Вот и потрать их с пользой для себя...
|
|
05.03.2015, 11:15
|
Профессор
|
|
Регистрация: 12.12.2012
Сообщений: 1,398
|
|
var obj = {
"database.host": "127.0.0.1",
"database.user": "test",
"database.password": "qwerty",
"rest.photo.host": "127.0.0.2",
"rest.users.host": "127.0.0.3",
"rest.users.password": "p@ssw0rd",
"baseUrl": "test.com",
"limit": 10
};
var result = {};
Object.keys(obj).forEach(function (name) {
var path = result, names = name.split("."), len = names.length;
names.forEach(function (subName, index) {
if (!path[subName]) {
if (index == len - 1) {
path[subName] = obj[name];
} else {
path[subName] = {};
}
}
path = path[subName];
});
});
alert(JSON.stringify(result , "", 4));
|
|
05.03.2015, 13:25
|
Новичок на форуме
|
|
Регистрация: 04.03.2015
Сообщений: 2
|
|
Спасибо за помощь. Это задание совершенно сбило меня с толку
|
|
05.03.2015, 13:58
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,215
|
|
Сообщение от dumspiro
|
Это задание совершенно сбило меня с толку
|
Это букварская задачка на циклы. Что тут может сбить с толку?
|
|
07.03.2015, 01:34
|
Новичок на форуме
|
|
Регистрация: 07.03.2015
Сообщений: 1
|
|
Помогите найти ошибку
Сообщение от tsigel
|
var obj = {
"database.host": "127.0.0.1",
"database.user": "test",
"database.password": "qwerty",
"rest.photo.host": "127.0.0.2",
"rest.users.host": "127.0.0.3",
"rest.users.password": "p@ssw0rd",
"baseUrl": "test.com",
"limit": 10
};
var result = {};
Object.keys(obj).forEach(function (name) {
var path = result, names = name.split("."), len = names.length;
names.forEach(function (subName, index) {
if (!path[subName]) {
if (index == len - 1) {
path[subName] = obj[name];
} else {
path[subName] = {};
}
}
path = path[subName];
});
});
alert(JSON.stringify(result , "", 4));
|
Я вот сделал чуток по-другому, но работает только если оставить "database.host": "127.0.0.1". Где ошибка?
var obj = {
"database.host": "127.0.0.1",
"database.user": "test",
"database.password": "qwerty",
"rest.photo.host": "127.0.0.2",
"rest.users.host": "127.0.0.3",
"rest.users.password": "p@ssw0rd",
"baseUrl": "test.com",
"limit": 10
};
var len;
var names;
var res;
var result = {};
var keys = Object.keys(obj);
function createObject (name)
{
res =result;
names=name.split('.');
len=names.length;
names.forEach (resultObject);
};
for (var i=0;i<keys.length;i++)
{
var arr =[];
arr[0]=keys[i];
arr.forEach(createObject);
}
function resultObject (subName, index)
{console.log(index+'-'+subName);
if (!res[subName])
{
if (index == len-1)
{
res[subName] = obj[keys];
}
else
{
res[subName] = {};
}
}
res = res[subName];
};
alert (JSON.stringify(result , "", 4));
[/quote]
Последний раз редактировалось xdarkV, 07.03.2015 в 12:31.
|
|
10.03.2015, 09:30
|
Профессор
|
|
Регистрация: 12.12.2012
Сообщений: 1,398
|
|
xdarkV,
Вот вам ваш исправленный вариант:
var len;
var names;
var res;
var result = {};
var keys = Object.keys(obj);
for (var i = 0; i < keys.length; i++) {
var arr = [];
createObject(keys[i]);
}
function createObject(name) {
res = result;
names = name.split('.');
len = names.length;
names.forEach(resultObject);
}
function resultObject(subName, index) {
if (!res[subName]) {
if (index == len - 1) {
res[subName] = obj[keys[i]];
} else {
res[subName] = {};
}
}
res = res[subName];
}
alert(JSON.stringify(result, "", 4));
|
|
|
|