我有一个字符串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中做到这一点?
当前回答
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);
});
"objects"数组将包含所有对象
其他回答
如果我没理解错的话:
var properties = string.split(', ');
var obj = {};
properties.forEach(function(property) {
var tup = property.split(':');
obj[tup[0]] = tup[1];
});
我假设属性名在冒号的左边,它所取的字符串值在右边。
注意Array。forEach是JavaScript 1.6——您可能需要使用工具包来实现最大的兼容性。
这是通用代码,不管你的输入有多长,但如果有:分隔符:)
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)
实际上,最好的解决方案是使用JSON:
文档
JSON。女孩(文本[一]);
例子:
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();
在你的情况下,简短而漂亮的代码
Object.fromEntries(str.split(',').map(i => i.split(':')));
你的字符串看起来像一个没有花括号的JSON字符串。
这应该工作,然后:
obj = eval('({' + str + '})');
警告:这会引入重大的安全漏洞,例如使用不受信任的数据(应用程序用户输入的数据)进行XSS。