我有一个字符串如下:
var str = "
a:aaa
b:bbb"
将此字符串转换为JavaScript对象的最佳方法是什么?
{a:"aaa", b:"bbb"}
答案 0 :(得分:2)
不一定是最好的方式,但 a 方式:
console.log(
"a:aaa\nb:bbb".split('\n').reduce(
(obj, line) => {
const [key, val] = line.split(':');
obj[key] = val;
return obj;
},
{}
)
);
按换行符拆分行,遍历每一行,将其拆分为:
并将其添加到对象中。
答案 1 :(得分:2)
您可以将模式^([^:]):(.*)$
与全局g
和多行m
标志一起使用。此模式要求每一行都采用x:y
格式,而x
不能包含冒号,并且必须至少有一个冒号。
var text = document.getElementById('element').textContent;
var regex = /^([^:]):(.*)$/gm;
var match = regex.exec(text);
var object = {};
while(match != null) {
object[match[1]] = match[2];
match = regex.exec(text);
}
console.log(object);
<pre id="element">
a:aaa
b:bbb
</pre>
答案 2 :(得分:1)
地图/缩小解决方案:
var str = "\na:aaa\nb:bbb"
var obj = str
// split into lines
.split("\n")
// only keep lines with a ':'
.filter(function(x) { return x.indexOf(':') !== -1; })
// At this point we have Array [ "a:aaa", "b:bbb" ]
// foreach line, split into key and value, and put
// in an array
.map(function(line) { return line.split(':'); })
// At this point we have Array[['a', 'aaa'], ['b', 'bbb']]
// use reduce: use an empty object as the accumulator
// and add keys/values sequentially
.reduce(function(acc, el) { acc[el[0]] = el[1]; return acc }, {});
console.log(obj);