我有一个字符串:
var rrule = "DTSTART=20190514T111500Z;FREQ=DAILY;INTERVAL=1";
我想将此字符串转换为数组中的key->值对。
[
dtstart: 20190514T111500Z,
freq: daily,
interval: 1
]
我知道我可以将字符串作为字符串并根据分号进行分割:
var array = rrule.split(";");
...但是这给我留下了一个像这样的数组:
[
"DTSTART=20190514T111500Z",
"FREQ=DAILY",
"INTERVAL=1"
]
我想我还需要一步来绘制键/值,但是到那时我迷路了。
理想情况下,对于字符串,我希望能够轻松访问dtstarts等于什么,区间等于什么,其他变量等于什么,等等。
答案 0 :(得分:3)
let str = "DTSTART=20190514T111500Z;FREQ=DAILY;INTERVAL=1";
let obj = {};
for (let entry of str.split(";")) {
let pair = entry.split("=");
obj[pair[0]] = pair[1];
}
console.log(obj);
答案 1 :(得分:0)
您已经知道如何在;
上拆分以获取数组,您可以从那里聚合(使用reduce
)以获取对象:
var rrule = "DTSTART=20190514T111500Z;FREQ=DAILY;INTERVAL=1";
var result = rrule.split(";").reduce( (obj,item) => {
let [key,value] = item.split("=");
obj[key] = value;
return obj;
},{});
console.log(result["DTSTART"])
console.log(result["FREQ"])
console.log(result["INTERVAL"])
答案 2 :(得分:0)
您可以像下面的代码一样使用它:
var rrule = "DTSTART=20190514T111500Z;FREQ=DAILY;INTERVAL=1";
let finalObj = {};
rrule.split(';').forEach(i => finalObj[i.split('=')[0]] = i.split('=')[1]);
console.log('finalObj',finalObj);
在这里,我先用';'分割因此,考虑第一项为DTSTART=20190514T111500Z
,然后在与=
分割时得到finalObject['DTSTART'] = 20190514T111500Z
答案 3 :(得分:0)
首先从split开始是正确的,然后将返回一个字符串数组。
要轻松地转换它们,只需使用map
,再次返回分割的单个字符串,然后根据您想要提供的属性名称及其值返回一个对象
function createKeyValuePairFromString( str ) {
return str.split(';').map( item => {
const splitted = item.split('=');
return { [splitted[0]]: splitted[1] };
});
}
console.log( createKeyValuePairFromString("DTSTART=20190514T111500Z;FREQ=DAILY;INTERVAL=1") );
答案 4 :(得分:0)
使用创建的数组,并使用=
再次拆分function convertToObject(cookieString) {
const cookieObj = {};
if (!cookieString && typeof cookieString !== 'string') return cookieObj;
const arr = cookieString.split(';');
arr.forEach(record => {
if (record.includes('=')) {
const [key, value] = record.split('=');
cookieObj[key.trim()] = value;
}
});
return cookieObj;
}
答案 5 :(得分:0)
使用forEach()
let str = "DTSTART=20190514T111500Z;FREQ=DAILY;INTERVAL=1";
let obj = {};
let strArr = str.split(';')
strArr.forEach((str) => {
let [key, value] = str.split('=')
obj[key] = value;
});
console.log(obj);
答案 6 :(得分:0)
这是一个相当简单的版本,返回一个对象,而不是一个数组:
const toObj = str => str
.split (';')
.map ( s => s .split ('=') )
.reduce ( (a, [k, v]) => ({...a, [k]: v}), {} )
let str = "DTSTART=20190514T111500Z;FREQ=DAILY;INTERVAL=1";
console.log (
toObj(str)
)
我喜欢该库的原因之一是我们可以更简单地编写这种逻辑。在Ramda中(免责声明:我是作者之一),它可能看起来像这样:
const toObj = pipe ( split (';'), map (split ('=') ), fromPairs)
let str = "DTSTART=20190514T111500Z;FREQ=DAILY;INTERVAL=1";
console.log (
toObj(str)
)
<script src="https://bundle.run/ramda@0.26.1"></script><script>
const {pipe, split, map, fromPairs} = ramda; </script>
答案 7 :(得分:0)
var str = "DTSTART=20190514T111500Z;FREQ=DAILY;INTERVAL=1";
//字符串分割规则
const rule = (string, delimiter) => string.split(delimiter);
const result = rule(str, ';').reduce((acc, s) => {
const [key, value] = rule(s, '=');
acc[key] = value;
return acc;
}, {});
console.log(result);
答案 8 :(得分:-2)
首先用;
分割字符串
var res = rrule.split(';')
然后用'='分隔每个字符串
res = res.map(i => i.split('='))