下面的 if-block 似乎效率很低。我想有更好的方法來做到這一點。
這將用于在圖形庫中設定引數。例如相機位置、物體位置等。
此外,歡迎使用通用解決方案。
const queryString = window.location.search;
const urlParameter = new URLSearchParams(queryString);
//this code is what my question is about V
if (urlParameter.has("a")) {
a = parseInt(urlParameter.get("a"));
}
if (urlParameter.has("b")) {
b = parseInt(urlParameter.get("b"));
}
if (urlParameter.has("c")) {
c = parseInt(urlParameter.get("c"));
}
if (urlParameter.has("d")) {
d = parseInt(urlParameter.get("d"));
}
//^
注意:我對 JavaScript 相當缺乏經驗,主要將它用于業余專案。
uj5u.com熱心網友回復:
您可以使用帶有輸入引數名稱的陣列并對其進行迭代。
但是由于你不能在 JavaScript 中分配動態變數名,你需要稍微改變你的輸出來使用一個物件:
const allowedParameters = ['a', 'b', 'c', 'd'];
const parsedParameters = {};
allowedParameters.forEach((key)=> {
if (urlParameter.has(key)) {
parsedParameters[key] = parseInt(urlParameter.get(key));
}
});
// To use the values just access each key in the parsedParameters object:
console.log(parsedParameters.a);
uj5u.com熱心網友回復:
與其將它們存盤為單獨的變數,不如將它們存盤在物件或 Map 實體中。這允許在設定/獲取值時采用更動態的方法。
const allowedParameters = ["a", "b", "c", "d"];
const values = {};
for (const paramName of allowedParameters) {
if (urlParameter.has(paramName)) {
values[paramName] = parseInt(urlParameter.get(paramName));
}
}
然后,您可以通過values.a(或values["a"]) values.b、 等訪問這些值。
如果您確實想將它們存盤為單獨的變數,您可以使用解構賦值,這確實假設變數沒有事先定義。
const [a, b, c, d] = ["a", "b", "c", "d"].map((paramName) => {
if (urlParameter.has(paramName)) {
return parseInt(urlParameter.get(paramName));
}
});
以上將設定a, b, c, 并且d不管它們是否存在于urlParameter. 如果它們不存在,它們將被設定為undefined,因為如果不存在map()回呼將回傳undefined(它沒有回傳值)。
a這意味著如果, b,c和已經定義,則此解決方案將不起作用d,并且您只想重新定義它們(如果存在)。
這可以通過下面的解決方案解決,但這僅在重新定義變數時有效,而不是在您第一次初始化它們時。
[a, b, c, d] = Object.entries({ a, b, c, d }).map((paramName, oldValue) => {
if (urlParameter.has(paramName)) {
return parseInt(urlParameter.get(paramName));
} else {
return oldValue;
}
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/420259.html
標籤:
