我正在尝试将字符串解析为JavaScript数组或映射。我要解析的字符串看起来像:
"{key1=value1, key2=value2, key3=value3}"
我目前拥有的代码有效,但是有点冗长。
str = "{key1=value1, key2=value2, key3=value3}";
str = str.replace(/{/g, '');
str = str.replace(/}/g, '');
var strMap = {};
str.split(', ').forEach(function(x) {
var arr = x.split('=');
strMap[arr[0]] = arr[1];
});
console.log(strMap)
这让我得到了想要的东西,但是不是很干净。有人建议我使用JSON.parse
,但由于该字符串不是有效的JSON格式,因此似乎不起作用。
是否有一种简洁的方法可以使我不必手动解析字符串?
答案 0 :(得分:1)
您可以用逗号和空格分隔字符串,并使用分隔符键/值对分隔新对象的属性。结果将字符串作为值。
program main
implicit none
integer i
integer, parameter :: para1(*) = [1, 2, 3, 4, 5]
integer, parameter :: para2(*) = [6, 7]
integer, parameter :: N1 = size(para1), N2 = size(para2), N = max(N1, N2)
integer, parameter :: params(N, 2) = &
reshape( [ para1, (0, i = 1, N - N1), &
para2, (0, i = 1, N - N2) ], [N, 2] )
print *, "para1 = ", params( :, 1 )
print *, "para2 = ", params( :, 2 )
print *, "Input i"
read *, i
print *, params( :, i )
end
$ gfortran-8 test.f90 && ./a.out
para1 = 1 2 3 4 5
para2 = 6 7 0 0 0
Input i
1
1 2 3 4 5
或者接受(即将到来的)Object.fromEntries
。
const getPair = ([k, v]) => ({ [k]: v });
var string = "{key1=value1, key2=value2, key3=value3}",
result = Object.assign(...string
.slice(1, -1)
.split(/,\s+/)
.map(p => getPair(p.split('=')))
);
console.log(result);
答案 1 :(得分:-1)
您可以使用一些ES6功能轻松组合一个不错的天真解决方案(如示例中所示)。
const example = "{key1=value1, key2=value2, key3=value3}";
const stripped = example.substring(1, example.length - 1);
const map = stripped.split(",")
.map(pair => pair.trim())
.reduce((result, current) => {
const [key, value] = current.split("=");
return {
...result,
key: value
};
}, {});