I'm trying to write an expression for a pop up in ArcGIS Online that will display the name of the fields if there is a specific value under those fields for each feature. I adapted the following script that I found online.
var i = 0
var features = [];
function addvalue(feat) {
if (!IsEmpty(feat)) {
features[i++] = feat;
}
}
addvalue($feature.schoolCommGardenQuarter);
addvalue($feature.smarterLunchQUARTER);
addvalue($feature.schoolWellnessQuarter);
addvalue($feature.keysNAPSACCquarter);
addvalue($feature.healthConcessionsQuarter);
addvalue($feature.foodPantryBackpackQuarter);
addvalue($feature.farmMarketorPopUpQuarter);
addvalue($feature.rydQUARTER);
addvalue($feature.directEd);
addvalue($feature.onetimeRYDEventQuarter);
return Concatenate(features, ";")
This runs without issue but it returns the values as a concatenated list (such as [YES;NO;YES;YES]
). I want to edit the above script so that it returns a text string of the field names that have YES
as a value.
I have since edited my script so that the if statement evaluates for the 'yes' value. I still am having trouble figuring out how to access and return the field names rather than the 'yes' values.
var i = 0
var features = [];
function addvalue(feat) {
if (feat == 'Yes') {
features [i++] = feat;
}
}
addvalue($feature.schoolCommGardenQuarter);
addvalue($feature.smarterLunchQUARTER);
addvalue($feature.schoolWellnessQuarter);
addvalue($feature.keysNAPSACCquarter);
addvalue($feature.healthConcessionsQuarter);
addvalue($feature.foodPantryBackpackQuarter);
addvalue($feature.farmMarketorPopUpQuarter);
addvalue($feature.rydQUARTER);
addvalue($feature.directEd);
addvalue($feature.onetimeRYDEventQuarter);
return Concatenate(features, ";")
-
Suggest you look at the help file. Your first issue is to test IF the value is yes. Look here for code examples.Hornbydd– Hornbydd2018年05月08日 15:11:04 +00:00Commented May 8, 2018 at 15:11
-
Thanks. Possible values in this dataset include 'yes', 'no', and blanks. I overlooked the inclusion of 'no' in this script.Thomson Gross– Thomson Gross2018年05月08日 15:40:07 +00:00Commented May 8, 2018 at 15:40
-
@GIS Pragmatist is there anyway to edit your code to only return non-empty fields names + their attributes? This DOES NOT work but this is the idea: var returnstring = "List of All Values"+TextFormatting.NewLine for (var i in !IsEmpty($feature)) { returnstring = returnstring + i + ": " + $feature[i] + "; " + TextFormatting.NewLine } return returnstringErick– Erick2020年04月03日 12:43:16 +00:00Commented Apr 3, 2020 at 12:43
2 Answers 2
The only way I could see doing it is to add an argument in your function for the field name. You have to add it manually to each addvalue call
function addvalue(feat, field) {
if (feat == 'Yes') {
features[i++] = field;
}
}
addvalue($feature.schoolCommGardenQuarter, "schoolCommGardenQuarter");
I just had to do this, came across your question and have a solution.
Iterate $feature as below. Drop this into the Arcade playground and see:
var returnstring = "AllValues"
for (var i in $feature) {
returnstring = returnstring + ":" + i + ":" + $feature[i]
}
return returnstring