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.
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.
Share Improve this question edited Aug 12, 2015 at 10:34 SS306 asked Aug 12, 2015 at 10:27 SS306SS306 1571 gold badge3 silver badges9 bronze badges 2- 1 Check this: How to Remove Duplicate objects from JSON Array? it may be helpful. – Umair M Commented Aug 12, 2015 at 10:31
- Thank you. This was also helpful. – SS306 Commented Aug 12, 2015 at 10:53
4 Answers
Reset to default 5This 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.
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>
var names_array = [
{name: "a", age: 15},
{name: "a", age: 16},
{name: "a", age: 17},
{name: "b", age: 18},
{name: "b", age: 19}];
function removeDuplicate(arr, prop) {
var new_arr = [];
var lookup = {};
for (var i in arr) {
lookup[arr[i][prop]] = arr[i];
}
for (i in lookup) {
new_arr.push(lookup[i]);
}
return new_arr;}
var newArray = removeDuplicate(names_array, 'name');
console.log("Result "+newArray);
Array.from(new Set(brand.map(obj => JSON.stringify(obj)))).map(item => JSON.parse(item))