我有一个字符串,看起来像这样:
'a=aaa,bbb,ccc&b=aaa,bbb,ccc&c=aaa,bbb,ccc'
我想把它转换成这样的对象:
{ a: 'aaa, bbb, ccc', b: 'aaa, bbb, ccc', c: 'aaa, bbb, ccc' }
我尝试了在&
和 =
上分割,但结果如下:
[ ['a', 'aaa','bbb','ccc'], ['b', 'aaa','bbb','ccc'], ['c', 'aaa','bbb','ccc' ] ]
我有一个字符串,看起来像这样:
'a=aaa,bbb,ccc&b=aaa,bbb,ccc&c=aaa,bbb,ccc'
我想把它转换成这样的对象:
{ a: 'aaa, bbb, ccc', b: 'aaa, bbb, ccc', c: 'aaa, bbb, ccc' }
我尝试了在&
和 =
上分割,但结果如下:
[ ['a', 'aaa','bbb','ccc'], ['b', 'aaa','bbb','ccc'], ['c', 'aaa','bbb','ccc' ] ]
您可以直接使用URLSearchParams:
var params = new URLSearchParams('a=aaa,bbb,ccc&b=aaa,bbb,ccc&c=aaa,bbb,ccc');
var obj = Object.fromEntries(params.entries())
console.log(obj);
https://www.npmjs.com/package/url-search-params-polyfill https://github.com/feross/fromentries
split()
,你需要将对象拆分成键和值。你可以在一个reduce
循环中(或者forEach()
)实现这一点: Original Answer翻译成"最初的回答"
s = 'a=aaa,bbb,ccc&b=aaa,bbb,ccc&c=aaa,bbb,ccc'
let pairs = s.split('&') // each pair is like a=aaa,bbb,ccc
let obj = pairs.reduce((obj,data)=> {
let [k, v] = data.split('=') // split each pair into key/value
obj[k] = v // add the key to the object
return obj
}, {})
console.log(obj)
console.log(Qs.parse('a=aaa,bbb,ccc&b=aaa,bbb,ccc&c=aaa,bbb,ccc'))
<script src="https://unpkg.com/qs@6.7.0/dist/qs.js"></script>
URLSearchParams
,所以它一定是来自其他代码。 QS使用自己的解析功能。 - adambene你可以将字符串强制转换为一个由[key, value]
条目组成的数组,首先在&
上进行拆分,然后映射拆分输出以再次通过=
进行拆分,然后使用Object.fromEntries
。
kv_str = 'a=aaa,bbb,ccc&b=aaa,bbb,ccc&c=aaa,bbb,ccc'
kv_pairs = kv_str.split('&')
kv_entries = kv_pairs.map(kv => kv.split('='))
kv_obj = Object.fromEntries(kv_entries)
// kv_obj will be: {a: 'aaa,bbb,ccc', b: 'aaa,bbb,ccc', c: 'aaa,bbb,ccc'}
var myObj = {};
for (var i=0; i<arr.length; i++) {
for (var j=0; j<arr[i].length; j++) {
var newProp = arr[i].shift();
myObj[newProp] = arr[i].join()
}
}
没有测试过,但我认为那应该可以工作。