0

I have below array in jQuery as below.

var originalArray=[
   {ID: "01", PID: "1111", Week: "Week1"},
   {ID: "02", PID: "2222", Week: "Week1"},
   {ID: "03", PID: "3333", Week: "Week1"},
   {ID: "04", PID: "4444", Week: "Week1"},
   {ID: "05", PID: "1111", Week: "Week1"}, //Duplicate entry like ID 01

   {ID: "06", PID: "1111", Week: "Week2"},
   {ID: "07", PID: "2222", Week: "Week2"},
   {ID: "08", PID: "3333", Week: "Week2"},
   {ID: "09", PID: "4444", Week: "Week2"},
   {ID: "10", PID: "1111", Week: "Week2"}, //Duplicate entry like ID 06

   {ID: "11", PID: "1111", Week: "Week3"},
   {ID: "12", PID: "2222", Week: "Week3"},
   {ID: "13", PID: "3333", Week: "Week3"},
   {ID: "14", PID: "4444", Week: "Week3"},
   {ID: "15", PID: "2222", Week: "Week3"}, //Duplicate entry like ID 11

   {ID: "16", PID: "1111", Week: "Week4"},
   {ID: "17", PID: "2222", Week: "Week4"},
   {ID: "18", PID: "3333", Week: "Week4"},
   {ID: "19", PID: "4444", Week: "Week4"},
   {ID: "20", PID: "4444", Week: "Week4"}  //Duplicate entry like ID 19
];

Now, what I want is all the records with combination of only properties "PID" & "Week" as duplicate to be removed.
To explain further, below records should be removed.

  • Record with ID "05" --> PID "1111" & Week "Week1" is same as ID "01"
  • Record with ID "10" --> PID "1111" & Week "Week2" is same as ID "06"
  • Record with ID "15" --> PID "2222" & Week "Week3" is same as ID "11"
  • Record with ID "20" --> PID "4444" & Week "Week4" is same as ID "19"

This is what I have tried so far:

//Array declaration
var originalArray=[
   {ID: "01", PID: "1111", Week: "Week1"},
   {ID: "02", PID: "2222", Week: "Week1"},
   {ID: "03", PID: "3333", Week: "Week1"},
   {ID: "04", PID: "4444", Week: "Week1"},
   {ID: "05", PID: "1111", Week: "Week1"}, //Duplicate entry like ID 01
   
   {ID: "06", PID: "1111", Week: "Week2"},
   {ID: "07", PID: "2222", Week: "Week2"},
   {ID: "08", PID: "3333", Week: "Week2"},
   {ID: "09", PID: "4444", Week: "Week2"},
   {ID: "10", PID: "1111", Week: "Week2"}, //Duplicate entry like ID 06
   
   {ID: "11", PID: "1111", Week: "Week3"},
   {ID: "12", PID: "2222", Week: "Week3"},
   {ID: "13", PID: "3333", Week: "Week3"},
   {ID: "14", PID: "4444", Week: "Week3"},
   {ID: "15", PID: "2222", Week: "Week3"}, //Duplicate entry like ID 11
   
   {ID: "16", PID: "1111", Week: "Week4"},
   {ID: "17", PID: "2222", Week: "Week4"},
   {ID: "18", PID: "3333", Week: "Week4"},
   {ID: "19", PID: "4444", Week: "Week4"},
   {ID: "20", PID: "4444", Week: "Week4"}  //Duplicate entry like ID 19
];

var result = [];
var tempArr = [];

 $.each(originalArray, function (index, entry) {
  if (!(tempArr[entry.PID] && tempArr[entry.Week])) {
   tempArr[entry.PID] = true;
   tempArr[entry.Week] = true;
   result.push(entry);
  }
 });

console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

With above tried code, I think it only checks first property PID, but not second property Week.
I have also tried below references, but could hardly find any help.

Duplicates in object array
How to remove duplicated OBJECTS from JavaScript array?
Remove duplicates from array of objects - Javascript
JavaScript Array Distinct()

Thanks in advance.

foodiepanda
  • 128
  • 1
  • 14

1 Answers1

2

You can put your custom logic to check for duplicates into a separate function and then iterate the original array and only copy entries when they are not duplicates.

function isDuplicate(entry, arr) {
  return arr.some(x => (entry.PID == x.PID) && (entry.Week == x.Week))
}

let newArray = []
for (const entry of originalArray) {
  if (!isDuplicate(entry, newArray)) { newArray.push(entry) }
}
mikado
  • 118
  • 8