How to find unique set of objects in an array

tanvi1
Giga Contributor

I have an array of objects like var array =[ { "name": "Joe", "age": 17,flag:"true" },{ "name": "Bob", "age": 17 ,flag:"true" },{ "name": "Carl", "age": 35,flag:"false"  },{ "name": "Joe", "age": 17,flag:"true" }]

I want the Unique set of objects like [ { "name": "Joe", "age": 17,flag:"true" },{ "name": "Bob", "age": 17 ,flag:"true" },{ "name": "Carl", "age": 35,flag:"false"  }]

I tried to use following script but arrow function is not supported in SNOW

var answer = [];

array.forEach(x => {
  if(!answer.some(y => JSON.stringify(y) === JSON.stringify(x))){
    answer.push(x)
  }
})



Any alternative code to do this requirement in SNOW ?
1 ACCEPTED SOLUTION

Try below in background script for a check.

var list = [{ "name": "Joe", "age": 17,flag:"true" },{ "name": "Bob", "age": 17 ,flag:"true" },{ "name": "Carl", "age": 35,flag:"false"  },{ "name": "Joe", "age": 17,flag:"true" }];

function dedupe(arr) {
  return arr.reduce(function(p, c) {

    var id = [c.name, c.age, c.flag].join('|');
    if (p.temp.indexOf(id) === -1) {
      p.out.push(c);
      p.temp.push(id);
    }
    return p;

    // return the deduped array
  }, {
    temp: [],
    out: []
  }).out;
}

gs.print(JSON.stringify(dedupe(list)));

Refer link for reference.

View solution in original post

7 REPLIES 7

Hitoshi Ozawa
Giga Sage
Giga Sage

Hi tanvi,

Following will find unique objects in an array.

var array =[ { "name": "Joe", "age": 17,flag:"true" },{ "name": "Bob", "age": 17 ,flag:"true" },{ "name": "Carl", "age": 35,flag:"false"  },{ "name":   "Joe", "age": 17,flag:"true" }];

var arr = [];
for (var i=0; i<array.length;i++) {
  arr.push(JSON.stringify(array[i]));
}

var arrayUtil = new ArrayUtil();
var uniq = arrayUtil.unique(arr);

gs.info(uniq);

Execution result:

*** Script: {"name":"Bob","age":17,"flag":"true"},{"name":"Carl","age":35,"flag":"false"},{"name":"Joe","age":17,"flag":"true"}

Jaspal Singh
Mega Patron
Mega Patron

@tanvi  I see you marked other answer as well correct. Unfortunately, you can have only one answer correct per thread so suggest you to mark suitable one that helped achieving the output in no time.