0

I have an object with two parameters ml_successor and ml_predecessor, I want to remove duplicates from object if both these parameters matches.

Below is the code I tried but it removes items even if one of the parameter(ml_successor or ml_predecessor) matches with other items.

var depArr = [{
    "ml_predecessor": "0e1cea11-4af4-4bb9-9269-8a1eecc3e848",
    "ml_successor": "c67c5b33-8e5c-48fc-9178-50eb8379426c"
}, {
    "ml_predecessor": "0e1cea11-4af4-4bb9-9269-8a1eecc3e848",
    "ml_successor": "db1cfd99-1e07-47b7-b9e0-bb84420f454e"
}, {
    "ml_predecessor": "0e1cea11-4af4-4bb9-9269-8a1eecc3e848",
    "ml_successor": "c67c5b33-8e5c-48fc-9178-50eb8379426c"
}, {
    "ml_predecessor": "db1cfd99-1e07-47b7-b9e0-bb84420f454e",
    "ml_successor": "73133d97-b094-41dd-ba2c-c93502a68bfa"
}, {
    "ml_predecessor": "0e1cea11-4af4-4bb9-9269-8a1eecc3e848",
    "ml_successor": "db1cfd99-1e07-47b7-b9e0-bb84420f454e"
}, {
    "ml_predecessor": "db1cfd99-1e07-47b7-b9e0-bb84420f454e",
    "ml_successor": "73133d97-b094-41dd-ba2c-c93502a68bfa"
}];
var dupes = {},
    dupes1 = {},
    singles = [];

$.each(depArr, function(i, el) {
    if (!dupes[el.ml_predecessor] && !dupes1[el.ml_successor]) {
        dupes[el.ml_predecessor] = true;
        dupes1[el.ml_successor] = true;
        singles.push(el);
    }
});
Rory McCrossan
  • 331,213
  • 40
  • 305
  • 339
coolbuddy
  • 25
  • 5
  • 1
    Possible duplicate of [Remove Duplicates from JavaScript Array](http://stackoverflow.com/questions/9229645/remove-duplicates-from-javascript-array) – Jared Smith Feb 26 '16 at 14:24

1 Answers1

0

Use this :

const singles = [];
const inArray = (array, item) => {
  return $.grep(array, (arrayItem) => { 
    return arrayItem.ml_predecessor === item.ml_predecessor  &&  arrayItem.ml_successor === item.ml_successor;
  }).length > 0;
};
$.each(depArr, (index, item) => {
  if (!inArray(singles, item)) {
      singles.push(item);
  }
});
Pierre C
  • 65
  • 6