Necesito agrupar todos los pId que tienen las mismas entradas de cId . tengo los siguientes datos -
const data = [{pId:"a", cId: [1,2]}, {pId:"b", cId: [1,2]}, {pId:"c", cId: [3]}]; const data1 = [{pId:"a", cId: [1,2,3]}, {pId:"b", cId: [1,2]}, {pId:"c", cId: [3]}]; const data2 = [{pId:"a", cId: [1,2,3]}, {pId:"b", cId: [1,2,3]}, {pId:"c", cId: [3]}];Rendimiento esperado -
data = [{pId:["a","b"], cId: [1,2]}, {pId:["c"],cId: [3]}] data1 = [{pId:["a","b"], cId: [1,2]}, {pId:["a","c"],cId: [3]}] data2 = [{pId:["a","b"], cId: [1,2,3]},{pId:["a","b","c"],cId: [3]}]Por favor ayuda, en el enfoque. Kindoff atascado, incapaz de pensar lo que califica todos los casos
Por lo que puedo deducir, está buscando agrupar en función de la similitud de la matriz en cId . Creo que estás viendo algo como esto:
function unique (array) { return Array.from(new Set(array)); } function match (cIds) { return function (x) { return x.cId.join() == cIds; } } function regroup () { return unique(data.map(x => x.cId.join()) .map(cIds => ({ pId: data.filter(match(cIds)).map(x => x.pId), cId: data.find(match(cIds)).cId })); } data = regroup(data); data1 = regroup(data1); data2 = regroup(data2); Tenga en cuenta que esta es una forma muy ingenua de comparar matrices por valores (hay muchas join involucradas). Esto no está listo para el código de producción, pero entiende cómo manejar este problema.