ค้นหาเว็บไซต์

javascript - ดึงพารามิเตอร์คีย์ล่าสุดจากหลายพารามิเตอร์ใน URL เดียวได้อย่างไร?


เมื่อผู้ใช้ อยู่ในหน้าหน้า 'a' และเขียนบางอย่างในช่องกรอกข้อมูลของฟอร์ม จากนั้นไปจากหน้า a ไปหน้า b และจากนั้นกลับไปหน้า a ที่นี่ถ้าผู้ใช้ต้องการดึงข้อมูลจาก URL อาจมีสองพารามิเตอร์ที่มีชื่อเดียวกัน ตัวอย่างเช่น URL นี้ ?name=james&name=alex คำถามของฉันคือจะดึงค่า 'name' ล่าสุดได้อย่างไร เช่น name name=alex คือค่าที่ใหม่ ที่นี่คือตัวอย่างวิธีที่ฉันดึงจาก URL:

const query = window.location.toString().split("?")[1];

const urlParams = new URLSearchParams(query);


const Name = urlParams.get("name") || props.order?.name;
<Form.Item label={t( "orders.name")} name="name" initialValue={Name || ""}>
  <Input type="string" />
</Form.Item>

คำตอบ #1

คำตอบนี้นำมาจากที่นี่

คุณควรเข้ารหัสชื่อของคุณเป็นอาเรย์และตั้งค่าให้กับพารามิเตอร์ name เมื่อคุณเพิ่มชื่อใหม่ ให้ใช้ Array.push(ITEM) เพื่อเพิ่มไปที่ตอนท้าย และเพื่อรับรายการที่เพิ่มล่าสุด ให้ใช้ Array[Array.length - 1].

//URL to array:
function URLToArray(url, param) {
    return url.substring(url.indexOf(param + '=') + param.length + 1).split('&')[0].split('_');
}

//Array to URL:
function ArrayToURL(array, param) {
  return param + '=' + array.join('_');
}

/*************************************/

//You can then use this as such:

// Get Array
var myArray = URLToArray('https://google.com?name=Bob_Joe_Tom&state=Alaska_Texas_Main', 'name');

console.log(myArray);

// Get URL
myArray.push('Steph'); //Lets add a name to the array
var myNameUrl = 'www.google.com?' + ArrayToURL(myArray, 'name');


console.log(myNameUrl);

ฉันได้ทำสิ่งนี้ขึ้นเพื่อให้คุณสามารถมีอาร์เรย์จำนวนเท่าใดก็ได้บน URL ดังนั้นนี่คือเหตุผลว่าทำไมฉันถึงมีค่า state ในตัวอย่าง เพียงเพื่อแสดงว่ามันสามารถแยกระหว่างอาร์เรย์สองตัวได้

คำตอบ #2

อาจจะสิ่งนี้ช่วยคุณได้

function getLatestParamFromUrl(param="") {
  const url = new URL(window.location.href);

  const values = url.searchParams.getAll(param);

  const latestValues = values.length > 0 ? values.pop() : false;

  return !!latestValues && latestValues;
}

console.log(getLatestParamFromUrl("name"));