我一直在嘗試不同的方法來檢查這個 JSON 是否包含“屬性”。通過這種方式,我可以確定給定的坐標是否在濕地之外。如果它們在濕地中,“屬性”將存在于 JSON 中。如果它們不在濕地中,則“屬性”不會在 JSON 中。
當我運行這個函式時,我只得到TRUE- 當我輸入濕地中的坐標時(在 JSON url 中嘗試 43.088,它回傳 true)。
但是我想要給定的 url 為 FALSE。出于某種原因,當我這樣做時console.log("FALSE"),這根本不會出現或回傳控制臺中if hasOwnProperty('attributes') == false。
我錯過了什么嗎?
function(GetData) {
fetch('https://www.fws.gov/wetlandsmapservice/rest/services/Wetlands/MapServer/0/query?where=&text=&objectIds=&time=&geometry=-88.305,43.060&geometryType=esriGeometryPoint&inSR=4326&spatialRel=esriSpatialRelWithin&relationParam=&outFields=WETLAND_TYPE&returnGeometry=false&returnTrueCurves=false&maxAllowableOffset=&geometryPrecision=&outSR=&returnIdsOnly=false&returnCountOnly=false&orderByFields=&groupByFieldsForStatistics=&outStatistics=&returnZ=false&returnM=false&gdbVersion=&returnDistinctValues=false&resultOffset=&resultRecordCount=&queryByDistance=&returnExtentsOnly=false&datumTransformation=¶meterValues=&rangeValues=&f=pjson&__ncforminfo=qCOZOO8Kyr4uogGcKvxkzzuK7gmavd4CxwTAkdbAsF2_aT4eeNbB0NpLwCYwiAJSf1ZHqY3CKVZ3osgMevhYGQrqRUQZej5oHaSmnSIaiZZb469Cexv-zqqmgYMuFJAAzrcRxvKXPBz9VnYPnMrM6kBNhO-cz6yK_w5T1mqNu_VXSbjBSihVf4_mlUBSVb9yf4C8scYXWm9Iak2Nfn1dtJACNUHLBHSElLvc1wxFMO2eUWNsD3qpCk3kAcRyYftuFU86n7THyk2IvkIUpxNmDHRxmmbgSYvPLMkl8t41Jzjp_bntkIyOWB0u8cQU2VsfASFUdznRkvrvYrQxgR8eyvsPq5oV_ZoPSksVCew6xev0K_TV2NU-kjojYpowMVXpZtCX9P-Q_7m8ywt2PyLPhEVgQB12ji1S7G5FRzIt6E0SDoXMY1vqQvPtedaNYbBCazXgs05L9DFKdtvrwmQVCeLmpBTduIhF9Sk4kozMnFX6GOANrZJMCI9AssN0DjrhlZkgDVw0l1flF44Zli927CXGTQ-oUpwsn7PPypVkN2iDJf-nz9XNbj82sv1c6B5s5UZVwiOp8VHJfZSDJ8BAYR4z_oONT2JwbVSKKlFKeN72f-Y6EejcB9wPKmn5kYjv7CKkRyIIv4F4cqVWxLK9x33uvEDMTvxX')
.then(function(response) {
return response.json();
})
.then(function(data) {
appendData3(data);
})
.catch(function(err) {
console.log('error: ' err);
});
function appendData3(data) {
for (let obj of data['features']) {
if (obj.hasOwnProperty('attributes') == false) {
console.log("FALSE");
} else {
console.log("TRUE");
}
}
}
};
uj5u.com熱心網友回復:
問題是回應data['features']中是空的。遍歷空陣列時,不會for...of執行回圈內的任何內容。
const emptyArray = [];
for (const item of emptyArray) {
// body is never executed...
}
如果僅檢查其中是否存在專案data['features']就足夠了,則可以使用length陣列的。
function appendData3(data) {
if (data.features.length > 0) {
console.log("TRUE");
} else {
console.log("FALSE");
}
}
要檢查其中一個元素是否具有"attributes"您可以使用的屬性some():
function appendData3(data) {
if (data.features.some(item => item.hasOwnProperty("attributes"))) {
console.log("TRUE");
} else {
console.log("FALSE");
}
}
uj5u.com熱心網友回復:
如果您只是想確定某個特定點是否在濕地多邊形之一內,您可以讓服務器完成這項艱巨的作業并簡化您的請求。例如,要求計數。
請參閱https://developers.arcgis.com/rest/services-reference/enterprise/query-feature-service-layer-.htm上的 returnCountOnly
- https://www.fws.gov/wetlandsmapservice/rest/services/Wetlands/MapServer/0/query?geometry=-88.305,43.060&geometryType=esriGeometryPoint&inSR=4326&spatialRel=esriSpatialRelWithin&returnCountOnly=true&f=pjson
- https://www.fws.gov/wetlandsmapservice/rest/services/Wetlands/MapServer/0/query?geometry=-88.305,43.088&geometryType=esriGeometryPoint&inSR=4326&spatialRel=esriSpatialRelWithin&returnCountOnly=true&f=pjson
uj5u.com熱心網友回復:
我測驗了你的代碼,這就是問題所在。當坐標在濕地之外時, features 陣列是空的,這意味著你的 for 回圈中沒有任何事情發生。所以這樣做而不是直接檢查你的 for 回圈內部
function appendData3(data) {
// Here we check if features is empty by checking it's length
if (data['features'].length == 0) {
console.log("FALSE")
}
for (let obj of data['features']) {
console.log("TRUE");
}
}
我還看到您的 for 回圈每次只獲取一個物件,因此無需執行 for 回圈,只需這樣做:
function appendData3(data) {
var obj = data['features'][0]
if(obj) {
console.log('TRUE')
} else {
console.log('FALSE')
}
}
正如你所看到的,這次我做得更容易了,只需獲取第一個特征物件并檢查它是否存在。
另外,小提示:當你想檢查一個條件是否為假時,不要使用== false,只需在 if 陳述句的開頭加上一個感嘆號即可。像那樣:
if(!obj.hasOwnProperty('attributes')) {
// Code here will be executed if the condition is false
} else {
// Code here will be executed if the condition is true
}
我希望這可以幫助您解決問題。
祝你今天過得愉快 :)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/412338.html
標籤:
上一篇:如果沒有,不要用JQ注入屬性
