Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как из строки получить обьект? (https://javascript.ru/forum/misc/39867-kak-iz-stroki-poluchit-obekt.html)

linklee 15.07.2013 10:25

Как из строки получить обьект?
 
Как превратить строку в обьект:
строку 'a.b.c.d' в обьект {a: {b: {c: 'd'}}} ?

skrudjmakdak 15.07.2013 10:35

для чего это??

можно так:
var str = '{"a": {"b": {"c": "d"}}}';
console.log(JSON.parse(str));

ruslan_mart 15.07.2013 10:57

function StringToObject(str)
{
    var a = '"}';
    str = str.split('.');
    for(var i=0; i<str.length; i++) a += '}';
    return JSON.parse('{"'+str.join('":{"')+a); 
}

console.log( StringToObject('a.b.c.d') );


Может, как-нибудь так :D

skrudjmakdak 15.07.2013 11:05

а еще можно так:
var str = 'a.b.c.d';
var obj;
if (str == 'a.b.c.d')
	obj = {a: {b: {c: 'd'}}};
console.log(obj);

:D

ОлегА 15.07.2013 11:17

function my_split(separator, str){
  var exp = {};
  arr = str.split(separator)

  if( arr.length > 1 ){
    first_val = arr[0];
    str = str.substr(first_val.length+separator.length);
    exp[ first_val ] = my_split(separator, str)
    return exp;
  } else {
    return str;
  }
}

str = 'a.b.c.d';

res = my_split('.', str);

linklee 15.07.2013 11:38

как оперативно ух ты...
что то не работает....
подключить что то надо?
задание такое тестовое... для этого надо =)
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Test 01</title>
<script type="text/javascript" >

function StringToObject(str){
var a = '"}';
str = str.split('.');
for(var i=0; i<str.length; i++) a += '}';
return JSON.parse('{"'+str.join('":{"')+a);
}
console.log( StringToObject('a.b.c.d') );</script>
</head>
<body >
<canvas id="canvas" width="300" height="300">
Canvas not supported.
</canvas>



</body></html>

ruslan_mart 15.07.2013 11:41

function StringToObject(str)
{
    var a = '"';
    str = str.split('.');
    for(var i=0; i<str.length; i++) a += '}';
    return JSON.parse('{"'+str.join('":{"')+a); 
}

console.log( StringToObject('a.b.c.d') );


Во.

linklee 15.07.2013 12:26

что то до сих пор не работает(
пишет :
Uncaught SyntaxError: Unexpected token }

skrudjmakdak 15.07.2013 12:29

скорей всего не хватает кавычки.. или лишняя

skrudjmakdak 15.07.2013 12:32

function StringToObject(str)
	{
		var a = '"';
		str = str.split('.');
		for(var i=0; i<str.length; i++) a += '}';
		console.log('{"'+str.join('":{"')+a); 
	}

console.log( StringToObject('a.b.c.d') );


посмотрите что выводит.. не хватает присвоения:
{"a":{"b":{"c":{"d"}}}}
должно быть хотя бы так:
{"a":{"b":{"c":{"d": 1}}}}

skrudjmakdak 15.07.2013 12:33

вы лучше скажите, для чего все эти гарадушки..

linklee 15.07.2013 12:38

и как добавить это присвоение?)))

linklee 15.07.2013 12:40

просто такое задание и есть
есть строка 'a.b.c.d' превратить ее в обьект {a: {b: {c: 'd'}}}

ruslan_mart 15.07.2013 12:42

Цитата:

Сообщение от skrudjmakdak
должно быть хотя бы так:
{"a":{"b":{"c":{"d": 1}}}}

function StringToObject(str)
{
    var a = '":1';
    str = str.split('.');
    for(var i=0; i<str.length; i++) a += '}';
    return JSON.parse('{"'+str.join('":{"')+a); 
}

console.log( StringToObject('a.b.c.d') );


:D

linklee 15.07.2013 12:46

понял только с еденичкой будет работать..

ruslan_mart 15.07.2013 12:52

Цитата:

Сообщение от linklee
просто такое задание и есть
есть строка 'a.b.c.d' превратить ее в обьект {a: {b: {c: 'd'}}}

Оу, ну тогда вообще:

var str = 'a.b.c.d';

var obj = str.replace(/(a)\.(b)\.(c)\.(d)/, function()
{
    var a = arguments;
    return eval('{'+a[1]+':{'+a[2]+':{'+a[3]+':"'+[a[4]+'"}}}');
});

Или:
var str = 'a.b.c.d';
str = str.split('.');
var obj = eval('{'+str.[1]+':{'+str.[2]+':{'+str.[3]+':"'+[str.[4]+'"}}}');

рони 15.07.2013 13:21

:write:
var str = 'a.b.c.d';
str = str.replace(/([^.]+)$/,'"$1"');
str_plus = Array(str.split('.').length).join('}');
str += str_plus;
str = str.replace(/([^.]+)\./g ,'{"$1":');
var data = JSON.parse(str);
alert(JSON.stringify(data));// для проверки

danik.js 15.07.2013 13:25

Учитесь, шпана )

var str = 'a.b.c.d';
var o = str.split('.').reduceRight(function(a, b){var o = {}; o[b] = a; return o;});

alert(JSON.stringify(o));


Никаких eval'ов, никаких регулярок и прочей фигни :)

ruslan_mart 15.07.2013 14:02

danik.js, хрень :D
С Eval'ом круче :)

danik.js 15.07.2013 14:03

Ruslan_xDD, завидуй молча )

ruslan_mart 15.07.2013 14:07

danik.js, ок :D

linklee 15.07.2013 14:20

оооо спасибо всем за столько решений мне последнее импонирует больше всего...))

я правильно понимаю reduceright после сплита берет на каждом шаге последние 2 элемента массива начиная справа
и выполняет callback функцию
в которой создается обьект o
и его свойству b ставится значение a...

danik.js 15.07.2013 18:11

http://es5.javascript.ru/x15.4.html#x15.4.4.22


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