我有一个字符串as
string = "firstName:name1, lastName:last1";
现在我需要一个对象obj这样
obj = {firstName:name1, lastName:last1}
我如何在JS中做到这一点?
我有一个字符串as
string = "firstName:name1, lastName:last1";
现在我需要一个对象obj这样
obj = {firstName:name1, lastName:last1}
我如何在JS中做到这一点?
当前回答
你的字符串看起来像一个没有花括号的JSON字符串。
这应该工作,然后:
obj = eval('({' + str + '})');
警告:这会引入重大的安全漏洞,例如使用不受信任的数据(应用程序用户输入的数据)进行XSS。
其他回答
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'。所以我建议您使用一个特殊的分隔符,如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];
});
}
我在几行代码中实现了一个相当可靠的解决方案。
有一个像这样的HTML元素,我想传递自定义选项:
<div class="my-element"
data-options="background-color: #dadada; custom-key: custom-value;">
</div>
函数解析自定义选项并返回一个对象以在某处使用:
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')));
这是通用代码,不管你的输入有多长,但如果有:分隔符:)
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)
我使用的是JSON5,它工作得非常好。
好的部分是它不包含eval和new Function,使用起来非常安全。
我知道这是一个老帖子,但没有看到这个问题的正确答案。
var jsonStrig = '{';
var items = string.split(',');
for (var i = 0; i < items.length; i++) {
var current = items[i].split(':');
jsonStrig += '"' + current[0] + '":"' + current[1] + '",';
}
jsonStrig = jsonStrig.substr(0, jsonStrig.length - 1);
jsonStrig += '}';
var obj = JSON.parse(jsonStrig);
console.log(obj.firstName, obj.lastName);
现在你可以使用obj了。firstName和obj。lastName来获取值,就像你通常对一个对象所做的那样。