Сравнить адресную строку на наличие повторений
доброго времени суток. Может кто сможет подсказать с одной задачкой.
Есть две строки. 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, время: 01:32. |