Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

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

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.