我有以下字符串:Jack:13,Phil:15,Lucy:12
我正在尝试从此字符串中获取对象。
该字符串将包含 3 个带有年龄的人对象。如何做到这一点?
我尝试了以下方法:
var s = 'Jack:13,Phil:15,Lucy:12'
var obj1 = eval("("+s+")");
var obj2 = JSON.parse(s);
记录任何 obj 变量都会返回错误。我在这里错过了一个简单的技巧吗?任何解释将不胜感激,谢谢。
一般来说,如果您正在对字符串进行替换以将其转换为您可以传递的内容eval
或JSON.parse
,那可能不是您的最佳方法。特别是,尽可能避免使用eval
(或其表亲new Function
)(您当然可以在这里),并始终避免eval
(或其表亲new Function
)使用不受信任的输入。
一对split
s 可以map
做到:
const s = 'Jack:13,Phil:15,Lucy:12'
const people = s.split(",")
.map(e => e.split(":"))
.map(([name, age]) => ({name, age}));
console.log(people);
...或在 ES5 中:
var s = 'Jack:13,Phil:15,Lucy:12'
var people = s.split(",")
.map(function(e) { return e.split(":"); })
.map(function(e) { return {name: e[0], age: e[1]}; });
console.log(people);
我不知道为什么我做了两张地图,而不是仅仅做第二次分割并在同一个回调中创建对象;我想我越来越多地以“函数式编程”的方式思考。我会改变它,但埃迪的回答已经在一个单一的map
,所以......
...(edit) 但由于看起来您想要单独的属性,而不是像 Eddie 那样使用人名,这里有一个上面的例子,但只有一个map
:
const s = 'Jack:13,Phil:15,Lucy:12'
const people = s.split(",")
.map(e => {
const [name, age] = e.split(":");
return {name, age};
});
console.log(people);
...或在 ES5 中:
var s = 'Jack:13,Phil:15,Lucy:12'
var people = s.split(",")
.map(function(e) {
var parts = e.split(":");
return {name: parts[0], age: parts[1]};
});
console.log(people);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句