| 
	| 
	
	| 
		
	| 
			
			 
			
				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,298
					 
		
 |  |  
	| 
	
 
	| Сообщение от 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,298
					 
		
 |  |  
	| 
	
 
	| Сообщение от 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));
 |  |  |  |