Most efficient way to remove duplicates in an array of CDT or Map based on a specific key?

I need to check a specific field in an array of cdt or map for duplicates, and return an array of cdt or map without duplicates on that field. For example:

CDT Array:

{
type!example(

email: "hello@gmail.com",

type: 1,

date: 01/01/2022

),

type!example(

email: "hello11@gmail.com",

type: 1,

date: 03/02/2023

),

type!example(

email: "hello@gmail.com",

type: 2,

date: 01/02/2023

)

}

In the above case, I want to return an array with unique email fields. Since the first and third item in the array have the same email address "hello@gmail.com", I only want to return the first one.

  Discussion posts and replies are publicly visible

Parents
  • 0
    Certified Associate Developer

    try this -> 

    a!localVariables(
      local!data: {
        'type!{urn:com:appian:types:DCT}DCT_temp'(
          type: 1,
          email: "212@gmail.com",
          date: today()
        ),
        'type!{urn:com:appian:types:DCT}DCT_temp'(
          type: 2,
          email: "211@gmail.com",
          date: today()
        ),
        'type!{urn:com:appian:types:DCT}DCT_temp'(
          type: 3,
          email: "212@gmail.com",
          date: today()
        ),
        'type!{urn:com:appian:types:DCT}DCT_temp'(
          type: 1,
          email: "213@gmail.com",
          date: today()
        )
      },
      local!descardDuplicateEmailValue: a!forEach(
        items: local!data,
        expression: index(
          local!data,
          index(
            /*find where else our current email resides*/
            wherecontains(fv!item.email, local!data.email),
            /*take only first one*/
            1,
            ""
          ),
          ""
        )
      ),
      union(
        local!descardDuplicateEmailValue,
        local!descardDuplicateEmailValue
      )
    )

Reply
  • 0
    Certified Associate Developer

    try this -> 

    a!localVariables(
      local!data: {
        'type!{urn:com:appian:types:DCT}DCT_temp'(
          type: 1,
          email: "212@gmail.com",
          date: today()
        ),
        'type!{urn:com:appian:types:DCT}DCT_temp'(
          type: 2,
          email: "211@gmail.com",
          date: today()
        ),
        'type!{urn:com:appian:types:DCT}DCT_temp'(
          type: 3,
          email: "212@gmail.com",
          date: today()
        ),
        'type!{urn:com:appian:types:DCT}DCT_temp'(
          type: 1,
          email: "213@gmail.com",
          date: today()
        )
      },
      local!descardDuplicateEmailValue: a!forEach(
        items: local!data,
        expression: index(
          local!data,
          index(
            /*find where else our current email resides*/
            wherecontains(fv!item.email, local!data.email),
            /*take only first one*/
            1,
            ""
          ),
          ""
        )
      ),
      union(
        local!descardDuplicateEmailValue,
        local!descardDuplicateEmailValue
      )
    )

Children
No Data