Me gustaría encontrar conjuntos de datos duplicados de la carga útil debajo usando la combinación de 'NOMBRE', 'ID'. Si un conjunto existe más de 3 veces, necesito devolver NOMBRE, ID del conjunto de datos duplicados.
{ "Test": "1", "value": [ { "NAME": "ABCD", "ID": "1234", "ACTIVE": "true" }, { "NAME": "EFGH", "ID": "5678", "ACTIVE": "true" }, { "NAME": "EFGH", "ID": "5678", "ACTIVE": "true" }, { "NAME": "EFGH", "ID": "5678", "ACTIVE": "true" }, { "NAME": "ABCD", "ID": "1234", "ACTIVE": "true" }, { "NAME": "ABCD", "ID": "1234", "ACTIVE": "true" }, { "NAME": "IJKL", "ID": "91011", "ACTIVE": "true" } ] }
Rendimiento esperado:
["ABCD:1234", "EFGH:5678"]
Prueba esto. Puede mejorar esto aún más en términos de rendimiento, si trabaja un poco.
var data = { "Test": "1", "value": [ { "NAME": "ABCD", "ID": "1234", "ACTIVE": "true" }, { "NAME": "ABCD", "ID": "1234", "ACTIVE": "true" }, { "NAME": "ABCD", "ID": "1234", "ACTIVE": "true" }, { "NAME": "EFGH", "ID": "5678", "ACTIVE": "true" }, { "NAME": "IJKL", "ID": "91011", "ACTIVE": "true" } ] }; var objArray = data.value; var duplicates = []; // duplicates will be stored here. for(var i=0, iLen = objArray.length; i<iLen;i++){ var obj = objArray[i]; var filtered = objArray.filter(function(arrVal) { return arrVal.NAME === obj.NAME && arrVal.ID === obj.ID ; }); var dup = obj.NAME + ":" + obj.ID; if(filtered.length>=3 && duplicates.indexOf(dup) < 0) { duplicates.push(dup); } }
esta pregunta fue respondida varias veces en SO. Crea una matriz a partir del json y compara los elementos de la matriz.
¿Cómo eliminar todos los duplicados de una matriz de objetos?
De acuerdo con su salida de muestra, creo que es "al menos 3 veces" en lugar de "más de 3 veces".
El siguiente fragmento puede producir el resultado esperado con los datos de muestra.
const data = { "Test": "1", "value": [ { "NAME": "ABCD", "ID": "1234", "ACTIVE": "true" }, { "NAME": "EFGH", "ID": "5678", "ACTIVE": "true" }, { "NAME": "EFGH", "ID": "5678", "ACTIVE": "true" }, { "NAME": "EFGH", "ID": "5678", "ACTIVE": "true" }, { "NAME": "ABCD", "ID": "1234", "ACTIVE": "true" }, { "NAME": "ABCD", "ID": "1234", "ACTIVE": "true" }, { "NAME": "IJKL", "ID": "91011", "ACTIVE": "true" } ] }; const occurrence = {}; // key: count const result = []; for (const item of data.value) { const key = `${item.NAME}:${item.ID}`; occurrence[key] = (occurrence[key] || 0) + 1; if (occurrence[key] >= 3) { result.push(key); } } console.log(result);