【问题标题】:How to remove duplicate from array of objects with multiple properties as unique?如何从具有多个属性的对象数组中删除重复项?
【发布时间】:2020-07-25 18:32:57
【问题描述】:

我在 jQuery 中有下面的数组,如下所示。

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
];

现在,我想要的是所有具有仅属性“PID”和“周”组合的记录作为要删除的重复项。
为了进一步说明,应删除以下记录。

  • ID为“05”的记录 --> PID“1111”和周“Week1”与ID“01”相同
  • ID 为“10”的记录 --> PID“1111”和周“Week2”与 ID“06”相同
  • ID 为“15”的记录 --> PID“2222”和周“Week3”与 ID“11”相同
  • 记录 ID “20” --> PID “4444” & Week “Week4” 与 ID “19” 相同

这是我迄今为止尝试过的:

//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>

使用上面的代码,我认为它只检查第一个属性 PID,而不是第二个属性 Week。
我也尝试过以下参考,但几乎找不到任何帮助。

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

提前致谢。

【问题讨论】:

    标签: arrays object properties duplicates unique


    【解决方案1】:

    您可以将检查重复项的自定义逻辑放入一个单独的函数中,然后迭代原始数组并仅在条目不重复时复制它们。

    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) }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-12
      • 1970-01-01
      • 2015-12-14
      • 1970-01-01
      • 1970-01-01
      • 2021-06-18
      • 1970-01-01
      • 2012-05-17
      相关资源
      最近更新 更多