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

时间:2019-05-17 01:16:37

标签: javascript arrays object

我有一个看起来像这样的字符串:

'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' ] ]

4 个答案:

答案 0 :(得分:3)

您可以只使用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);

如果您的浏览器没有这两个功能,则可以使用polyfill:

https://www.npmjs.com/package/url-search-params-polyfill https://github.com/feross/fromentries

答案 1 :(得分:1)

您可以使用QSURLSearchParams Polyfill之类的软件包来支持IE和Node.js之类的任何浏览器。

请参见以下示例:

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>

答案 2 :(得分:1)

如果只想使用split(),则需要使对象脱离分割键和值。您可以在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)

答案 3 :(得分:0)

您可以像这样遍历结果数组-

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()
    }
}

没有测试,但是我认为那可以。