Getting One Property Value From Dictionary Based Upon Another Property Value

I have this expression rule and I need to get the value of one of the keys based upon whether another key property is true or false, I have this but doesn't work:

a!localVariables(
  local!myDictionary: {
    {
    item: 1,
    active: true,
    description: "Widget",
    color: "Green"}
    ,{
    item: 2,
    active:false,
    description: "another",
    color: "red"}
  },
  if(
  fn!index(local!myDictionary,"active","") == true,
    fn!index(local!myDictionary,"color",null), "")
)

To explain further: I would want to return the value "Green" from the key property color due to active property being true and not the value "red" because active property is false.

  Discussion posts and replies are publicly visible

Parents
  • Hi

    Here's the code:

    a!localVariables(
      local!myDictionary: {
        {
          item: 1,
          active: true,
          description: "Widget",
          color: "Green"
        },
        {
          item: 2,
          active: false,
          description: "another",
          color: "red"
        }
      },
      local!myDictionary.color[fn!wherecontains(true,fn!toboolean(local!myDictionary.active))]
    )

    Here's the result:

    ...and here's an explanation:

    • you can address elements in an array using the square brackets
    • ...so we're looking to extract all of the color attribute values - addressed using local!myDictionary.color - where the corresponding 'active' attribute is true...
    • ...so we use the function 'wherecontains()' which returns the indices in an array that contain the the provided value. So, in our case, fn!wherecontains(true,<the array of local!myDictionary.active>)
    • the expression inside the square brackets returns the indices and is then used to return the values for the array that the square brackets are attached to

    Hope this helps

Reply
  • Hi

    Here's the code:

    a!localVariables(
      local!myDictionary: {
        {
          item: 1,
          active: true,
          description: "Widget",
          color: "Green"
        },
        {
          item: 2,
          active: false,
          description: "another",
          color: "red"
        }
      },
      local!myDictionary.color[fn!wherecontains(true,fn!toboolean(local!myDictionary.active))]
    )

    Here's the result:

    ...and here's an explanation:

    • you can address elements in an array using the square brackets
    • ...so we're looking to extract all of the color attribute values - addressed using local!myDictionary.color - where the corresponding 'active' attribute is true...
    • ...so we use the function 'wherecontains()' which returns the indices in an array that contain the the provided value. So, in our case, fn!wherecontains(true,<the array of local!myDictionary.active>)
    • the expression inside the square brackets returns the indices and is then used to return the values for the array that the square brackets are attached to

    Hope this helps

Children