我正在嘗試制作一個腳本
- 獲取包含引數/值并且每次都可以完全不同的當前 URL(示例中的 url1 變數) - OK
- 我提取引數和值并使用鍵/值從它們創建一個物件 - 好的
- 我建立了一個供以后使用的條件,動態地它不期望一定數量的對,所以它是從它在物件中找到的任何東西構建的 - 不好
.
let url1 = 'http://localhost/myproject/results?id=0001&area=eiffel tower&city=Paris&whatever=else';
function URLToArray(url) {
var request = {};
var pairs = url.substring(url.indexOf('?') 1).split('&');
for (var i = 0; i < pairs.length; i ) {
if(!pairs[i])
continue;
var pair = pairs[i].split('=');
request[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);
}
console.log(request); // { id: '0001', area: 'eiffel tower', city: 'Paris', whatever: 'else' }
return(request);
}
let paramsObj = URLToArray(url1);
console.log(paramsObj) // { id: '0001', area: 'eiffel tower', city: 'Paris', whatever: 'else' }
// Step 3 below, where the issue is and I expect
// id === '0001' && area === 'eiffel tower' && city === 'Paris' && something === 'else'
paramsObj.forEach((item) => {
let condition = '';
let keys = Object.keys(item);
keys.map((k) => {
if (condition) {
condition = ` && ${k} === '${item[k]}'`
} else {
condition = `${k} === '${item[k]}'`
}
})
console.log(condition);
})
輸出
paramsObj.forEach((item) => { TypeError: paramsObj.forEach is not a function at Object.<anonymous>
預計在console.log(condition)
id === '0001' && area === 'eiffel tower' && city === 'Paris' && whatever === 'else'
注意:如果物件在[ ]括號內,則輸出將以某種方式成為預期的輸出。但是URLToArray(url)輸出不帶括號的物件。
uj5u.com熱心網友回復:
ForEach 方法是一個陣列方法,并且您嘗試在物件上使用它,您可能應該只創建一個將物件作為其引數之一的函式。
function ProcessItem(item) {
let condition = '';
let keys = Object.keys(item);
keys.map((k) => {
if (condition) {
condition = ` && ${k} === '${item[k]}'`
} else {
condition = `${k} === '${item[k]}'`
}
})
console.log(condition);
}
uj5u.com熱心網友回復:
回傳一個物件而URLToArray()不是陣列。您不能forEach在物件的實體上使用。
相反,您可能想要遍歷鍵,如下所示:
Object.keys(paramsObj).forEach((key) => {
const value = paramsObj[key];
let condition = '';
if (condition) {
condition = ` && ${key} == ${value}`;
} else {
condition = `${key} == ${value}`;
}
);
uj5u.com熱心網友回復:
考慮以下。
var url1 = 'http://localhost/myproject/results?id=0001&area=eiffel tower&city=Paris&whatever=else';
function getQueryFromURL(u) {
var r = {};
var parts;
if (u.indexOf("?") > -1) {
parts = u.substr(u.indexOf("?") 1).split("&");
$.each(parts, function(i, v) {
r[v.split("=")[0]] = decodeURI(v.split("=")[1]);
});
}
return r;
}
function objJoin(o, a, b) {
var r = "";
var arr;
$.each(o, function(k, v) {
if (r.length == 0) {
r = [k, a, v].join(" ");
} else {
r = " " [b, k, a, v].join(" ");
}
});
return r;
}
let paramsObj = getQueryFromURL(url1);
console.log(paramsObj);
console.log(objJoin(paramsObj, "===", "&&"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
這并沒有太大的不同,它只是更好地利用手頭的工具來獲得相同的結果。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/510386.html
上一篇:Python串列理解忽略無結果?
