[英]How to convert string into object with key value pairs
I have a string that looks like this:我有一个看起来像这样的字符串:
'a=aaa,bbb,ccc&b=aaa,bbb,ccc&c=aaa,bbb,ccc'
and I want to change it into an object that looks like this:我想将其更改为如下所示的 object:
{ a: 'aaa, bbb, ccc', b: 'aaa, bbb, ccc', c: 'aaa, bbb, ccc' }
I've tried splitting on the &
and then =
but that results in:我尝试在
&
然后=
上拆分,但结果是:
[ ['a', 'aaa','bbb','ccc'], ['b', 'aaa','bbb','ccc'], ['c', 'aaa','bbb','ccc' ] ]
You could just use URLSearchParams : 你可以使用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);
If your browser doesn't have either of those functions, you can use a polyfill: 如果您的浏览器没有这些功能,您可以使用polyfill:
https://www.npmjs.com/package/url-search-params-polyfill https://github.com/feross/fromentries https://www.npmjs.com/package/url-search-params-polyfill https://github.com/feross/fromentries
You could use a package like QS or URLSearchParams Polyfill to support any browsers like IE and Node.js as well. 您可以使用QS或URLSearchParams Polyfill等软件包来支持IE和Node.js等任何浏览器。
See example below: 见下面的例子:
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>
If you want to just use split()
, you need to make the object out of the split keys and values. 如果您只想使用
split()
,则需要使用拆分键和值创建对象。 You can do this in a reduce
loop (or a forEach()
): 您可以在
reduce
循环(或forEach()
)中执行此操作:
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)
You can just iterate thru the resulting array like this- 您可以像这样通过生成的数组进行迭代 -
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()
}
}
Didn't test it but I think that would work. 没有测试它,但我认为这将有效。
You can coerce the string into an array of [key, value]
entries by first splitting on the &
, then mapping over the split output to split once again by =
and then use Object.fromEntries
.您可以通过首先拆分
&
,然后映射拆分 output 以通过=
再次拆分,然后使用Object.fromEntries
将字符串强制转换为[key, value]
条目的数组。
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'}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.