Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.12.2018, 17:35
Новичок на форуме
Отправить личное сообщение для Maldades Посмотреть профиль Найти все сообщения от Maldades
 
Регистрация: 18.01.2018
Сообщений: 4

Сравнить адресную строку на наличие повторений
доброго времени суток. Может кто сможет подсказать с одной задачкой.
Есть две строки.
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';
Ответить с цитированием
  #2 (permalink)  
Старый 09.12.2018, 18:06
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

Сообщение от Maldades
par2=RR
Сообщение от Maldades
par2=A
?
Ответить с цитированием
  #3 (permalink)  
Старый 09.12.2018, 18:13
Новичок на форуме
Отправить личное сообщение для Maldades Посмотреть профиль Найти все сообщения от Maldades
 
Регистрация: 18.01.2018
Сообщений: 4

да, в условии нужно проверить на повторение одинаковых параметров и удалить лишнее. т.е. он должен удалить второй par2 из первой str, не добавить par1 в str1 так как уже par1 там есть, но добавить par5)
Надеюсь понятно объяснил))
Ответить с цитированием
  #4 (permalink)  
Старый 09.12.2018, 18:43
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

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>
Ответить с цитированием
  #5 (permalink)  
Старый 09.12.2018, 19:09
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Object.assign - для ишака тут как всегда проблемы https://msdn.microsoft.com/ru-ru/lib...(v=vs.94).aspx
Ответить с цитированием
  #6 (permalink)  
Старый 10.12.2018, 00:31
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

Сообщение от Maldades
первая типа адресная строка и там разные параметры
location.search начало строки с знака вопроса должно быть
function createObj(str) {
    var vars = {};
    str.replace(/[?&]+([^=&]+)=([^&]*)/gi, function (_, key, value) { vars[key] = value});
    return vars;
}
Ответить с цитированием
  #7 (permalink)  
Старый 10.12.2018, 05:42
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

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));
Ответить с цитированием
  #8 (permalink)  
Старый 10.12.2018, 11:21
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,004

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));
Ответить с цитированием
  #9 (permalink)  
Старый 10.12.2018, 12:26
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

Вариант
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));

Последний раз редактировалось Vlasenko Fedor, 10.12.2018 в 12:28.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вставить значение со страницы в адресную строку katarina Общие вопросы Javascript 1 12.11.2016 22:03
Показать скрытые блоки через адресную строку ami_moor Общие вопросы Javascript 3 28.09.2015 16:15
Команды в адресную строку другого окна mailua Общие вопросы Javascript 7 26.09.2012 00:39
Предполагается наличие ';' в IE7- FINoM (X)HTML/CSS 5 25.08.2012 16:05
отправка текста через адресную строку Изучаю_JS Общие вопросы Javascript 29 11.01.2012 18:47