Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Помогите решить тестовое задание в JS. (Займет 5 мин.) (https://javascript.ru/forum/misc/54131-pomogite-reshit-testovoe-zadanie-v-js-zajjmet-5-min.html)

dumspiro 04.03.2015 17:05

Помогите решить в 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
};

ksa 05.03.2015 09:05

Цитата:

Сообщение от dumspiro
Займет 5 мин.

Вот и потрать их с пользой для себя...

tsigel 05.03.2015 11:15

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));

dumspiro 05.03.2015 13:25

Спасибо за помощь. Это задание совершенно сбило меня с толку

ksa 05.03.2015 13:58

Цитата:

Сообщение от dumspiro
Это задание совершенно сбило меня с толку

Это букварская задачка на циклы. Что тут может сбить с толку? :blink:

xdarkV 07.03.2015 01:34

Помогите найти ошибку
 
Цитата:

Сообщение от tsigel (Сообщение 359683)
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]

tsigel 10.03.2015 09:30

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));


Часовой пояс GMT +3, время: 15:13.