首页 > 解决方案 > 合并字符串中的重复项并用逗号附加值

问题描述

假设我有一串

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

标签: javascript

解决方案


您可以先按&然后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)


推荐阅读