Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.03.2015, 17:05
Новичок на форуме
Отправить личное сообщение для dumspiro Посмотреть профиль Найти все сообщения от dumspiro
 
Регистрация: 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.
Ответить с цитированием
  #2 (permalink)  
Старый 05.03.2015, 09:05
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,215

Сообщение от dumspiro
Займет 5 мин.
Вот и потрать их с пользой для себя...
Ответить с цитированием
  #3 (permalink)  
Старый 05.03.2015, 11:15
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 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));
Ответить с цитированием
  #4 (permalink)  
Старый 05.03.2015, 13:25
Новичок на форуме
Отправить личное сообщение для dumspiro Посмотреть профиль Найти все сообщения от dumspiro
 
Регистрация: 04.03.2015
Сообщений: 2

Спасибо за помощь. Это задание совершенно сбило меня с толку
Ответить с цитированием
  #5 (permalink)  
Старый 05.03.2015, 13:58
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,215

Сообщение от dumspiro
Это задание совершенно сбило меня с толку
Это букварская задачка на циклы. Что тут может сбить с толку?
Ответить с цитированием
  #6 (permalink)  
Старый 07.03.2015, 01:34
Новичок на форуме
Отправить личное сообщение для xdarkV Посмотреть профиль Найти все сообщения от xdarkV
 
Регистрация: 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.
Ответить с цитированием
  #7 (permalink)  
Старый 10.03.2015, 09:30
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 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));
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите решить задачку valero Элементы интерфейса 10 07.03.2010 16:41
помогите задать переменную в js bsgroupua Общие вопросы Javascript 3 01.02.2010 18:28
Помогите решить несколько мат. задач в javascript 4_omd Общие вопросы Javascript 5 02.05.2009 12:02
Помогите решить задачу vkg Общие вопросы Javascript 1 20.02.2008 11:59