我正在嘗試使用URLSearchParams操作我的 URL 。但是URLSearchParams.delete()需要引數的名稱。如果我有同名的引數,(來自我在 chrome 中測驗過的)它將洗掉所有具有該名稱的引數。有沒有辦法同時按名稱和值洗掉?
我的查詢如下所示:
?color[]=Black&color[]=Green&material[]=Steel
所以當我呼叫.delete("color[]")它時會洗掉兩個color[]=引數,但是如果我只想洗掉一個特定的引數怎么辦?
重名的原因是后端 (PHP) 正在利用此功能將引數自動決議為陣列……這需要上述語法。
大圖是 - 我正在嘗試從這個即將成為的陣列中添加/洗掉“過濾器”。此外,某些過濾器類別可能具有匹配值,因此我也不想按值洗掉。我愿意考慮一種全新的方法……只是嘗試以最不笨拙的方式來做。
uj5u.com熱心網友回復:
要洗掉特定的鍵/值對,請遍歷條目,過濾掉不需要的條目并創建一個新的URLSearchParams:
function deleteParamsEntry(params, key, value) {
const newEntries = Array.from(params.entries()).filter(
([k, v]) => !(k === key && v === value)
);
return new URLSearchParams(newEntries);
}
const query = "?color[]=Black&color[]=Green&material[]=Steel";
const params = new URLSearchParams(query);
const newParams = deleteParamsEntry(params, "color[]", "Green");
console.log(newParams.toString());
uj5u.com熱心網友回復:
試試這個方法:
const deleteURLParamsByNameAndValue = (urlString, paramName, paramValue) => {
const url = new URL(urlString)
const params = url.searchParams
const newParamArray = []
for (var kvPair of params.entries()) {
const k = kvPair[0]
const v = kvPair[1]
if (k!==paramName || v!==paramValue) {
newParamArray.push(kvPair)
}
}
const newSearch = new URLSearchParams(newParamArray)
return decodeURI(`${url.origin}${url.pathname}?${newSearch}`)
}
const urlString = 'https://example.com/path1/path2?color[]=Black&color[]=Green&material[]=Steel'
deleteURLParamsByNameAndValue(urlString,'color[]','Black')
// returns 'https://example.com/path1/path2?color[]=Green&material[]=Steel'
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/373155.html
標籤:javascript php 网址
