如何将字符串转换为具有键值对的对象

5

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

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

5个回答

7

1
看起来很不错,但是当我尝试在我的代码中运行它时,我得到了“ReferenceError: URLSearchParams未定义”的错误,而我的代码是一个Ember fastboot环境。 - UXCODA

2
如果你想仅使用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)


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>


我正在使用QS,但仍然出现“ReferenceError: URLSearchParams未定义”的错误。有什么想法可以让它正常工作吗? - UXCODA
看QS的代码,它没有引用URLSearchParams,所以它一定是来自其他代码。 QS使用自己的解析功能。 - adambene

0

你可以将字符串强制转换为一个由[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'}

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

没有测试过,但我认为那应该可以工作。


我认为这个不能直接用在字符串上,可能需要先对字符串进行分割(split)。 - UXCODA

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接