JS中的对象的string

我有一个string

string = "firstName:name1, lastName:last1"; 

现在我需要一个对象obj这样的

 obj = {firstName:name1, lastName:last1} 

我怎么能在JS中做到这一点?

其实,最好的解决scheme是使用JSON:

文档

JSON.parse(text[, reviver]);

例子:

1)

 var myobj = JSON.parse('{ "hello":"world" }'); alert(myobj.hello); // 'world' 

2)

 var myobj = JSON.parse(JSON.stringify({ hello: "world" }); alert(myobj.hello); // 'world' 

3)将一个函数传递给JSON

 var obj = { hello: "World", sayHello: (function() { console.log("I say Hello!"); }).toString() }; var myobj = JSON.parse(JSON.stringify(obj)); myobj.sayHello = new Function("return ("+myobj.sayHello+")")(); myobj.sayHello(); 

你的string看起来像一个没有大括号的JSONstring。

然后这应该工作:

 obj = eval('({' + str + '})'); 

如果我理解正确:

 var properties = string.split(', '); var obj = {}; properties.forEach(function(property) { var tup = property.split(':'); obj[tup[0]] = tup[1]; }); 

我假设属性名称在冒号的左边,并且它所用的string值在右边。

请注意, Array.forEach是JavaScript 1.6的 – 您可能需要使用工具包来实现最大的兼容性。

这个简单的方法…

 var string = "{firstName:'name1', lastName:'last1'}"; eval('var obj='+string); alert(obj.firstName); 

产量

 name1 

如果您使用JQuery:

 var obj = jQuery.parseJSON('{"path":"/img/filename.jpg"}'); console.log(obj.path); // will print /img/filename.jpg 

请记住:eval是邪恶的! :d

我用几行代码实现了一个解决scheme,它的工作非常可靠。

有一个像这样的HTML元素,我想传递自定义选项:

 <div class="my-element" data-options="background-color: #dadada; custom-key: custom-value;"> </div> 

一个函数parsing自定义选项并返回一个对象来使用它:

 function readCustomOptions($elem){ var i, len, option, options, optionsObject = {}; options = $elem.data('options'); options = (options || '').replace(/\s/g,'').split(';'); for (i = 0, len = options.length - 1; i < len; i++){ option = options[i].split(':'); optionsObject[option[0]] = option[1]; } return optionsObject; } console.log(readCustomOptions($('.my-element'))); 
 string = "firstName:name1, lastName:last1"; 

这将工作:

 var fields = string.split(', '), fieldObject = {}; if( typeof fields === 'object') ){ fields.each(function(field) { var c = property.split(':'); fieldObject[c[0]] = c[1]; }); } 

但是效率不高。 当你有这样的事情会发生什么:

 string = "firstName:name1, lastName:last1, profileUrl:http://localhost/site/profile/1"; 

split()会分裂'http'。 所以我build议你使用一个特殊的分隔符像pipe道

  string = "firstName|name1, lastName|last1"; var fields = string.split(', '), fieldObject = {}; if( typeof fields === 'object') ){ fields.each(function(field) { var c = property.split('|'); fieldObject[c[0]] = c[1]; }); } 

这是通用的代码,不pipe你的input多长,但是在相同的模式下,如果有:分隔符:)

 var string = "firstName:name1, lastName:last1"; var pass = string.replace(',',':'); var arr = pass.split(':'); var empty = {}; arr.forEach(function(el,i){ var b = i + 1, c = b/2, e = c.toString(); if(e.indexOf('.') != -1 ) { empty[el] = arr[i+1]; } }); console.log(empty) 

如果你有一个像foo: 1, bar: 2那样的stringfoo: 1, bar: 2你可以把它转换成一个有效的obj:

 str .split(',') .map(x => x.split(':').map(y => y.trim())) .reduce((a, x) => { a[x[0]] = x[1]; return a; }, {}); 

感谢#javascript中的niggler。

 var stringExample = "firstName:name1, lastName:last1 | firstName:name2, lastName:last2"; var initial_arr_objects = stringExample.split("|"); var objects =[]; initial_arr_objects.map((e) => { var string = e; var fields = string.split(','),fieldObject = {}; if( typeof fields === 'object') { fields.forEach(function(field) { var c = field.split(':'); fieldObject[c[0]] = c[1]; //use parseInt if integer wanted }); } console.log(fieldObject) objects.push(fieldObject); }); 

“对象”数组将拥有所有的对象

在你的情况

 var KeyVal = string.split(", "); var obj = {}; var i; for (i in KeyVal) { KeyVal[i] = KeyVal[i].split(":"); obj[eval(KeyVal[i][0])] = eval(KeyVal[i][1]); }