简体   繁体   English

如何使用键值对将字符串转换为 object

[英]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. 您可以使用QSURLSearchParams 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM