javascript - 合并字符串中的重复项并用逗号附加值
问题描述
假设我有一串
let check = 'test_name=sdf&test_name=dfgdfg&test_last_name=dfg';
js中有没有一种方法可以合并重复项并用逗号附加它的值
输出应该是
test_name=sdf,dfgdfg&test_last_name=dfg;
知道我该怎么做
这是我迄今为止尝试过的
这是简化版
test2: function() {
let test2 = ['val1','val2','val3'];
let test3 = ['opt1','opt1','opt3'];
let filter = '';
for (let i = 0; i < test2.length; i++) {
let text = test2[i]; // input value
let val =test3[i]; // option value
filter += val + '=' + text;
if (filter.includes(val) === true) {
filter += ',' + text;
}
i !== test2.length-1 ? filter += '&' : '';
}
console.log(filter);
},
输出是opt1=val1,val1&opt2=val2,val2&opt3=val3,val3
解决方案
您可以先按&
然后map
通过值拆分字符串,然后使用 再次拆分它们=
,现在使用reduce
并且Map
我们将具有相同键名的值组合在一起,最后将它们连接起来以获得与原始字符串相同的结构
let check = 'test_name=sdf&test_name=dfgdfg&test_last_name=dfg';
let final = check.split('&').map(v=>v.split('=')).reduce((r,[k,v])=>{
r.set(k, (r.get(k)||[]).concat(v))
return r
},new Map())
let output = [...final].map(v=>`${v[0]}=${v[1].join(',')}`).join('&')
console.log(output)