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

Chetan Mahajan
Kilo Sage
Kilo Sage

Hi Tanvi,

                 you can use below for unique value in array 

var arrayUtil = new ArrayUtil();  
answer= arrayUtil.unique(answer);
gs.print(answer);  

Jaspal Singh
Mega Patron
Mega Patron

Try below in background script once.

var obj = '[ { "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 uni = [];

var parser = new JSONParser();
var parameterArr = parser.parse(obj);
for (var i = 0; i < parameterArr.length; i++) {
uni.push(parameterArr[i].name.replace(/\s/g, ''));
}

var noDuplicates = new ArrayUtil().unique(uni.toString().split(','));

gs.print(noDuplicates);

Hi Jaspal,

I want answer in this form  { "name": "Joe", "age": 17,flag:"true" },{ "name": "Bob", "age": 17 ,flag:"true" },{ "name": "Carl", "age": 35,flag:"false"  }

Above code is giving unique name only

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.