Сравнить адресную строку на наличие повторений
доброго времени суток. Может кто сможет подсказать с одной задачкой.
Есть две строки. str1 = '&par1=1&par2=RR&par3=234,223&par2=A'; str2 = '&par1=2&par5=pp'; первая типа адресная строка и там разные параметры. могут быть разные имена у параметров и так же разные значения. нужно сделать так что бы проверялась строка и не повторяла параметры и добавляла из второй строки те параметры которых нет в первой. Т.е. должна получиться строка str1 = '&par1=1&par2=RR&par3=234,223&par5=pp'; |
Цитата:
Цитата:
|
да, в условии нужно проверить на повторение одинаковых параметров и удалить лишнее. т.е. он должен удалить второй par2 из первой str, не добавить par1 в str1 так как уже par1 там есть, но добавить par5)
Надеюсь понятно объяснил)) |
Maldades,
<script> str1 = '&par1=1&par2=RR&par3=234,223&par2=A'; str2 = '&par1=2&par5=pp'; function fn(str1, str2) { function createObj(str) { return (str.match(/([^&]+=[^&]+)/g) || []).reduce(function(a, b) { b = b.split("="); a[b[0]] || (a[b[0]] = b[1]); return a }, {}) } str1 = createObj(str1); str2 = createObj(str2); str2 = Object.assign(str2, str1); str2 = Object.entries(str2).map(function(e) { return "&" + e.join("=") }).join(""); return str2 }; str2 = fn(str1, str2) document.write(str2) </script> |
Object.assign - для ишака тут как всегда проблемы https://msdn.microsoft.com/ru-ru/lib...(v=vs.94).aspx :)
|
Цитата:
function createObj(str) { var vars = {}; str.replace(/[?&]+([^=&]+)=([^&]*)/gi, function (_, key, value) { vars[key] = value}); return vars; } |
str1 = '&par1=1&par2=RR&par3=234,223&par2=A'; str2 = '&par1=2&par5=pp&par2=2'; str3 = '&par6=2&par5=pp&par7=2'; var filterURL=(...arg)=> arg.join('') .match(/&[^=]+=[^&]+/g) .filter((e, i, s)=>s.findIndex(el=>el.match(/&[^=]+/)[0] == e.match(/&[^=]+/)[0]) == i) .join(''); console.log(filterURL(str1,str2,str3)); |
function merge(str1, str2) { var map = Object.create(null); return (str1 + str2).replace(/&([^=]+)=[^&]*/ig, function (m, n) { return map[n] ? '' : (map[n] = true, m); }); } var str1 = '&par1=1&par2=RR&par3=234,223&par2=A'; var str2 = '&par1=2&par5=pp'; alert(merge(str1, str2)); |
Вариант :dance:
let str1 = '&par1=1&par2=RR&par3=234,223&par2=A'; let str2 = '&par1=2&par5=pp'; const merge = (str, table = {}) => str.replace(/[?&]+([^=&]+)=([^&]*)/gi, (t, key) => !table[key] && (table[key] = 1) ? t : ''); alert(merge(str1 + str2)); |
Часовой пояс GMT +3, время: 23:56. |