Dictionary functions

A set of functions for working with dictionaries.


DefaultValue

This function has 2 signatures:

DefaultValue(container, key, defaultValue) -> Any

Since version 1.26

Function bundle: Core

Returns a specified default value if a key in a dictionary does not exist or the value at the specified key is null or an empty text value.

Parameters

  • container: Dictionary | Attachment - The dictionary or attachment to check.
  • key: Text - The key to check.
  • defaultValue: Any - This value is returned if the key does not exist or the value at the specified key is null or an empty text value.

Return value: Any
Returns the value at the specified key if defined. Otherwise, returns the value specified in defaultValue.

Examples

DefaultValue returns a defined value

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var data = {
  time: Date(2024, 0, 24, 12),
  weather: {
    precipitation: {
      type: "rain",
      value: 0.4,
      unit: "inches"
    },
    temperature: {
      value: 50,
      unit: "f"
    },
    conditions: {
      description: "Overcast"
    }
  }
}

DefaultValue(data, "time", "No time logged")
// value of data.time is defined, so it is returned
// returns Jan 24, 2024, 12:00:00 PM system time

DefaultValue returns a default if there is no value at the specified key.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var data = {
  time: '',
  weather: {
    precipitation: {
      type: "rain",
      value: 0.4,
      unit: "inches"
    },
    temperature: {
      value: 50,
      unit: "f"
    },
    conditions: {
      description: "Overcast"
    }
  }
}

DefaultValue(data, "time", "No time logged")
// value of data.time is empty, so the default is returned
// returns "No time logged"

DefaultValue returns a default if the key does not exist.

1
2
3
4
5
6
7
var data = {
  time: ''
}

DefaultValue(data, "conditions", "n/a")
// the conditions key does not exist, so the default is returned
// returns "n/a"

DefaultValue(container, keys, defaultValue) -> Any

Since version 1.0

Function bundle: Core

Returns a specified default value if at least one of the keys in a nested dictionary does not exist or the value at the specified key is null or an empty text value.

Parameters

  • container: Dictionary | Attachment - The dictionary or attachment to check.
  • keys: Array<Number | Text> - An array of the keys or indexes to check in each level of the container's structure.
  • defaultValue: Any - This value is returned if at least one of the keys or indices does not exist or the value at the specified key is null or an empty text value.

Return value: Any
Returns the value at the specified key or index if defined. Otherwise, returns the value specified in defaultValue.

Examples

DefaultValue returns a defined value

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var data = {
  time: Date(2024, 0, 24, 12),
  weather: {
    precipitation: {
      type: "rain",
      value: 0.4,
      unit: "inches"
    },
    temperature: {
      value: 50,
      unit: "f"
    },
    conditions: {
      description: "Overcast"
    }
  }
}

DefaultValue(data, ["weather", "precipitation", "value"], "No time logged")
// value of data.weather.precipitation.value is defined, so it is returned
// returns 0.4

DefaultValue returns a default if there is no value at the specified key.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var data = {
  time: Date(2024, 0, 24, 12),
  weather: {
    precipitation: {
      type: "rain",
      value: null,
      unit: "inches"
    },
    temperature: {
      value: 50,
      unit: "f"
    },
    conditions: {
      description: "Overcast"
    }
  }
}

DefaultValue(data, ["weather", "precipitation", "value"], 0)
// value of data.weather.precipitation.value is null, so the default is returned
// returns 0

DefaultValue returns a default if the key does not exist.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var data = {
  time: Date(2024, 0, 24, 12),
  weather: {
    precipitation: {
      type: "rain",
      value: null,
      unit: "inches"
    },
    temperature: {
      value: 50,
      unit: "f"
    },
    conditions: {
      description: "Overcast"
    }
  }
}

DefaultValue(data, ["weather", "wind", "value"], "n/a")
// the data.weather.wind key does not exist, so the default is returned
// returns "n/a"

Check null value in an array within a dictionary with key that exists

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var data = {
  time: Date(2024, 0, 24, 12),
  interval: 1,
  intervalUnit: "days",
  weather: {
    precipitation: {
      type: "rain",
      values: [0.4, 0, 0, null, 0.1, 0.8, 1],
      unit: "inches"
    },
    temperature: {
      values: [50, 50, 51, 52, 55, 49, 51],
      unit: "f"
    },
  }
}

DefaultValue(data, ["weather", "precipitation", "values", 3], 0)
// the value data.weather.precipitation.values[3] is null, so the default is returned
// returns 0

Dictionary

This function has 5 signatures:

Dictionary([name1, value1, ..., nameN, valueN]?) -> Dictionary

Since version 1.0

Function bundle: Core

Returns a new dictionary based on the provided arguments. The arguments are name/value pairs. e.g. dictionary('field1',val,'field2',val2,...).

Parameter

  • [name1, value1, ..., nameN, valueN] (Optional): Any - Ongoing name/value pairs.

Return value: Dictionary

Example

prints 3

1
2
var d = Dictionary('field1', 1, 'field2', 2)
return d.field1 + d.field2

Dictionary(jsonText) -> Dictionary

Since version 1.8

Function bundle: Core

Deserializes JSON text as an Arcade Dictionary.

Parameter

  • jsonText: Text - The JSON to convert to an Arcade dictionary. This must be serialized as a text value.

Return value: Dictionary

Example

Deserializes JSON as a Dictionary.

1
2
3
var extraInfo = '{"id": 1, "population": 200, "city": "Spencer, ID"}'
var spencerIDdata = Dictionary(extraInfo)
spencerIDdata.population // Returns 200

Dictionary(inputGeometry) -> Dictionary

Since version 1.23

Function bundle: Geometry

Converts a geometry value to a dictionary.

Parameter

  • inputGeometry: Geometry - The geometry to convert to an Arcade dictionary. Starting at version 1.25, Polygon or Polyline inputs may contain curve objects when executed in ArcGIS Pro and ArcGIS Maps SDKs for Native Apps.

Return value: Dictionary

Example

Update the x attribute of a point geometry.

1
2
3
4
5
6
7
// convert the $feature's geometry to a dictionary
if (TypeOf(Geometry($feature)) == "Point") {
  var ptDict = Dictionary(Geometry($feature));
  ptDict.x *= 2; // stretch horizontally
  // create a new geometry from the updated dictionary
  return Geometry(ptDict);
}

Dictionary(inputFeature) -> Dictionary

Since version 1.23

Function bundle: Core

Converts a feature to a dictionary.

Parameter

  • inputFeature: Feature - The feature to convert to an Arcade dictionary.

Return value: Dictionary

Example

Convert a feature to a dictionary

1
2
// convert $feature to a dictionary
var featureDict = Dictionary($feature);

Dictionary(inputDictionary, deep?) -> Dictionary

Since version 1.23

Function bundle: Core

Creates either a shallow or deep copy of a dictionary.

Parameters

  • inputDictionary: Dictionary - The dictionary to copy.
  • deep (Optional): Boolean - If true, creates a deep copy of the dictionary will be created, meaning the properties of the output dictionary will not share the same references as the input dictionary. Default value is false.

Return value: Dictionary

Examples

Create a shallow copy of a Dictionary

1
2
3
4
5
6
7
8
9
10
11
var inputDict = {
  company: {
    name: "Esri",
    location: "Redlands, CA"
  },
  office: "M123"
};
var copiedDict = Dictionary(inputDict);
return inputDict.company == copiedDict.company
// returns true
// this is a shallow copy of the Dictionary, so the dictionaries share the same references

Create a deep copy of a Dictionary

1
2
3
4
var deepCopy = Dictionary(inputDict, true);
return inputDict.company == deepCopy.company
// returns false
// this is a deep copy of the Dictionary, so the dictionaries do NOT share the same references

FromJSON

FromJSON(jsonText) -> Dictionary | Array<Any> | Text | Boolean | Number

Since version 1.14

Function bundle: Core

Deserializes JSON text into its equivalent Arcade data types.

Parameter

  • jsonText: Text - The JSON text to deserialize to an Arcade data type.

Return value: Dictionary | Array<Any> | Text | Boolean | Number

Examples

Converts text to a boolean

1
2
FromJSON("true")
// Returns true

Converts text to a number

1
2
fromJSON("731.1")
// returns 731.1

Converts text to a dictionary

1
2
3
var d = fromJSON('{"kids": 3, "adults": 4 }')
d.kids + d.adults
// returns 7

Converts text to an array

1
2
fromJSON('["one", 2, "three", false]')
// returns [ "one", 2, "three", false ]

Converts text to null

1
2
fromJSON("null")
// returns null

HasKey

HasKey(value, key) -> Boolean

Since version 1.0

Function bundle: Core

Indicates whether a dictionary or feature has the input key.

Parameters

  • value: Dictionary | Feature - The dictionary or feature to check for a key or field name.
  • key: Text - The key or field name to check.

Return value: Boolean

Example

prints true

1
2
var d = Dictionary('Port Hope', 16214,  'Grafton', '<1000', 'Cobourg', 18519);
HasKey(d, 'Cobourg');

HasValue

This function has 2 signatures:

HasValue(inputDictionary, key) -> Boolean

Since version 1.20

Function bundle: Core

Indicates whether a dictionary has a given key and if that key has a value.

Parameters

  • inputDictionary: Dictionary | Attachment - The dictionary or attachment to check.
  • key: Text - The key or field name to check.

Return value: Boolean

Examples

Dictionary with key that has a value

1
2
3
var d = Dictionary('Port Hope', 16214,  'Grafton', '<1000', 'Cobourg', 18519);
HasValue(d, 'Cobourg');
// returns true

Dictionary with key that does not have a value

1
2
3
var d = Dictionary('Port Hope', 16214,  'Grafton', '<1000', 'Cobourg', null);
HasValue(d, 'Cobourg');
// returns false

Dictionary without the provided key

1
2
3
var d = Dictionary('Port Hope', 16214,  'Grafton', '<1000');
HasValue(d, 'Cobourg');
// returns false

Dictionary without the provided key

1
2
3
if ( HasValue( Schema($feature).fields[0], "domain" ) ) {
  // Do something with the value if true
}

HasValue(inputDictionary, keys) -> Boolean

Since version 1.26

Function bundle: Core

Checks whether a property nested several levels deep in a dictionary has a value. This allows you to drill into a nested structure in one step rather than check values at each level. Returns true if the keys and indexes at each level of the structure exist and include a non-null value.

Parameters

  • inputDictionary: Dictionary | Attachment - The dictionary or attachment to check.
  • keys: Array<Number | Text> - An array of the keys or indexes to check in each level of the structure.

Return value: Boolean

Examples

Check dictionary with key that has a nested value

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
var data = {
  time: Date(2024, 0, 24, 12),
  weather: {
    precipitation: {
      type: "rain",
      value: 0.4,
      unit: "inches"
    },
    temperature: {
      value: 50,
      unit: "f"
    },
    conditions: {
      description: "Overcast"
    }
  }
}

if(HasValue(data, ["weather","precipitation","value"])){
  // if() evaluates to true, thus executing the return
  return data.weather.precipitation.value;
}

Check value in a dictionary with key that does not exist

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
var data = {
  time: Date(2024, 0, 24, 12),
  weather: {
    precipitation: {
      type: "rain",
      value: 0.4,
      unit: "inches"
    },
    temperature: {
      value: 50,
      unit: "f"
    },
    conditions: {
      description: "Overcast"
    }
  }
}

if(HasValue(data, ["weather","precipitation","values", 0])){
  // if() evaluates to false ("values" does not exist), thus avoiding the block
  return data.weather.precipitation.values;
}

Check value in an array within a dictionary with key that does exist

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var data = {
  time: Date(2024, 0, 24, 12),
  interval: 1,
  intervalUnit: "days",
  weather: {
    precipitation: {
      type: "rain",
      values: [0.4, 0, 0, null, 0.1, 0.8, 1],
      unit: "inches"
    },
    temperature: {
      values: [50, 50, 51, 52, 55, 49, 51],
      unit: "f"
    },
  }
}

if(HasValue(data, ["weather","precipitation","values", 6])){
  // if() evaluates to true, thus executing the return
  return data.weather.precipitation.values[6];
}

Your browser is no longer supported. Please upgrade your browser for the best experience. See our browser deprecation post for more details.

You can no longer sign into this site. Go to your ArcGIS portal or the ArcGIS Location Platform dashboard to perform management tasks.

Your ArcGIS portal

Create, manage, and access API keys and OAuth 2.0 developer credentials, hosted layers, and data services.

Your ArcGIS Location Platform dashboard

Manage billing, monitor service usage, and access additional resources.

Learn more about these changes in the What's new in Esri Developers June 2024 blog post.

Close