Подскажите как дописать скрипт, чтобы убирались дубликаты из строки URL get запроса
Вот URL
pageno=1&email=&surname=&surname=&surname=&placeofwork=&position=&name=иван&middlename=в
Вот скрипт
<script>
function clearSeacrh(curProp, curVal) {
let tmp = '';
tmp = `&${curProp}=${curVal}`;
window.location.search = window.location.search + tmp;
}
</script>
<?php
if ($firstrow) { // поиск
echo "</tr><tr>";
foreach ($current_row as $key => $value) {
if (in_array($key, $fields2hide)) {
continue;
}
$nameru = (isset($fieldnames[$key])) ? $fieldnames[$key] : $key;
$tmp = '`&${' . 'this.name' . '}=${' . 'this.value' . '}`';
$tmpval = (isset($filter[$key])) ? $filter[$key] : '';
echo "<td><form data-submit='filter' method='get' autocomplete='off' role='form'><input type='text' value='{$tmpval}' name='{$key}' placeholder='{$nameru}' class='form-control' onblur='clearSeacrh(this.name, this.value)'></form></td>";
}
$firstrow = FALSE;
echo "</tr><tr>";
}
Ответы (1 шт):
Автор решения: yar85
→ Ссылка
Простой способ когда дублирование полное (когда пара имени и значения повторяется целиком) - он подходит к случаю из вопроса, но может не подойти к другим случаям:
const queryStr = 'pageno=1&email=&surname=&surname=&surname=&placeofwork=&position=&name=иван&middlename=в';
const filteredQueryStr = [...new Set(queryStr.split('&'))].join('&');
console.log(filteredQueryStr);
Способ чуть посложнее, учитывающий дублирование только имен параметров (а значением берется только последнее) - такой способ более универсальный:
const queryStr = 'pageno=1&email=&surname=foo&surname=bar&surname=baz&placeofwork=&position=&name=иван&middlename=в';
const paramsDict = queryStr.split('&').reduce((rslt, part) => {
const [key, val] = part.split('=');
rslt[key] = val;
return rslt;
}, {});
const filteredQueryStr = Object.entries(paramsDict).map(
([key, val]) => [key, val].join('=')
).join('&');
console.log(filteredQueryStr);
Еще можно использовать формирование query-строки через экспериментальный глобальный объект URL (у него есть объектный интерфейс взаимодействия со строкой параметров), но в этом вопросе формирование полного URL весьма неоднозначное, поэтому в ответе я ограничусь только ссылкой на справочную информацию об этом объекте.