Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Remove Duplicate Object from JSON Array

I am trying to remove duplicate JSON Objects from the array in ServiceNow. Tried below code but it does not remove the duplicate. I want to compare both name & city.

var arr1 = '[{"name":"Pune","city":"India"},{"name":"Pune","city":"India"}]';
var splitlen = JSON.parse(arr1);
alert(splitlen.length);

var uniqueArray = [];
var uniqueJson = {};
for(i=0;i<splitlen.length;i++)
    {
        
        if(uniqueArray.indexOf(splitlen[i].name)==-1)
            {
                uniqueArray.push(splitlen[i]);
            }
    }

alert(JSON.stringify(uniqueArray));

Expected output :

[{"name":"Pune","city":"India"}]
like image 558
snowcoder Avatar asked Oct 24 '25 02:10

snowcoder


1 Answers

uniqueArray.indexOf doesn't work because you're comparing objects against strings (splitlen[i].name). Try to use .find() instead:

var arr1 = '[{"name":"Pune","city":"India"},{"name":"Pune","city":"India"}]';
var splitlen = JSON.parse(arr1);

var uniqueArray = [];
var uniqueJson = {};
for(i=0;i<splitlen.length;i++)
    {
        
        if(!uniqueArray.find(x => x.name === splitlen[i].name))
            {
                uniqueArray.push(splitlen[i]);
            }
    }

console.log(uniqueArray);

or

var arr1 = '[{"name":"Pune","city":"India"},{"name":"Pune","city":"India"}]';
var splitlen = JSON.parse(arr1);

function compare(x){
   return x.name === splitlen[i].name;
}

var uniqueArray = [];
var uniqueJson = {};
for(i=0;i<splitlen.length;i++)
    {
        
        if(!uniqueArray.find(compare))
            {
                uniqueArray.push(splitlen[i]);
            }
    }

console.log(uniqueArray);
like image 137
mickl Avatar answered Oct 25 '25 17:10

mickl