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

Use dark colors for code blocksCopy
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.

Use dark colors for code blocksCopy
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.

Use dark colors for code blocksCopy
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

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

Use dark colors for code blocksCopy
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.

Use dark colors for code blocksCopy
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.

Use dark colors for code blocksCopy
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

Use dark colors for code blocksCopy
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

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

Use dark colors for code blocksCopy
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.

Use dark colors for code blocksCopy
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.

Use dark colors for code blocksCopy
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

Use dark colors for code blocksCopy
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

Use dark colors for code blocksCopy
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

Use dark colors for code blocksCopy
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

Use dark colors for code blocksCopy
1
2
FromJSON("true")
// Returns true

Converts text to a number

Use dark colors for code blocksCopy
1
2
fromJSON("731.1")
// returns 731.1

Converts text to a dictionary

Use dark colors for code blocksCopy
1
2
3
var d = fromJSON('{"kids": 3, "adults": 4 }')
d.kids + d.adults
// returns 7

Converts text to an array

Use dark colors for code blocksCopy
1
2
fromJSON('["one", 2, "three", false]')
// returns [ "one", 2, "three", false ]

Converts text to null

Use dark colors for code blocksCopy
1
2
fromJSON("null")
// returns null

HasKey

HasKey(value, key) -> Boolean

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

Use dark colors for code blocksCopy
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

Use dark colors for code blocksCopy
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

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

Dictionary without the provided key

Use dark colors for code blocksCopy
1
2
3
var d = Dictionary('Port Hope', 16214,  'Grafton', '<1000');
HasValue(d, 'Cobourg');
// returns false

Dictionary without the provided key

Use dark colors for code blocksCopy
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

Use dark colors for code blocksCopy
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

Use dark colors for code blocksCopy
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

Use dark colors for code blocksCopy
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.