Removing duplicates from JSON array by a value in each JSON object in array

15,051

Solution 1

This should do it:

names_array = [
    {name: "a",  age: 15},
    {name: "a",  age: 16},
    {name: "a",  age: 17},
    {name: "b",  age: 18},
    {name: "b",  age: 19}];

function hash(o){
    return o.name;
}    

var hashesFound = {};

names_array.forEach(function(o){
    hashesFound[hash(o)] = o;
})

var results = Object.keys(hashesFound).map(function(k){
    return hashesFound[k];
})

The hash function decides which objects are duplicates, the hashesFound object stores each hash value together with the latest object that produced that hash, and the results array contains the matching objects.

Solution 2

A slightly different approach:

var names_array = [
    { name: "a", age: 15 },
    { name: "a", age: 16 },
    { name: "a", age: 17 },
    { name: "b", age: 18 },
    { name: "b", age: 19 }
];

var names_array_new = names_array.reduceRight(function (r, a) {
    r.some(function (b) { return a.name === b.name; }) || r.push(a);
    return r;
}, []);

document.getElementById('out').innerHTML = JSON.stringify(names_array_new, 0, 4);
<pre id="out"></pre>

Share:
15,051
SS306
Author by

SS306

Updated on June 14, 2022

Comments

  • SS306
    SS306 almost 2 years

    If there are two JSON objects in an array with same value for a particular field, then I want to mark them as duplicate. I want to remove one of them. Similarly, when there are multiple duplicate, I only want to keep the last object(latest).If this is input:

    names_array = [
        {name: "a",  age: 15},
        {name: "a",  age: 16},
        {name: "a",  age: 17},
        {name: "b",  age: 18}
        {name: "b",  age: 19}];
    

    I want the output to be

    names_array_new = 
        {name: "a",  age: 17},
        {name: "b",  age: 19}];
    

    I have searched for this but only found how to remove duplicates when entire objects are same.

  • Narendra Jadhav
    Narendra Jadhav almost 6 years
    While this code snippet may be the solution, including an explanation really helps to improve the quality of your post. Remember that you are answering the question for readers in the future, and those people might not know the reasons for your code suggestion.