Tengo una matriz de matrices. Cada uno contiene una lista de información junto con una identificación de la siguiente manera:
let array = [ ['value1', 'value2', 'value3', 'value4', 'value5', 'id_1'], ['value1', 'value2', 'value3', 'value4', 'value5', 'id_1'], ['value7', 'value8', 'value9', 'value10', 'value11', 'id_3'], ['value20', 'value21', 'value22', 'value23', 'value24', 'id_4'], ['value20', 'value21', 'value22', 'value23', 'value24', 'id_5'], ];Quiero contar las distintas instancias de cada matriz. Al comparar dos matrices, si todos los índices son iguales, incluida la identificación, significa que la matriz es un duplicado y solo se debe contar 1 instancia.
Si todos los índices son iguales, pero la identificación es diferente, esto significa que esta es una instancia distinta de la matriz y debe agregarse al conteo.
La información debe mostrarse en un objeto como se muestra a continuación. Estoy luchando por visualizar cómo lograr esto, mi enfoque actual es eliminar las identificaciones de las matrices, agregarlas al objeto y luego encontrar una manera de contar las instancias únicas, pero no estoy seguro de si este es el método más efectivo.
let obj = [ { array=['value1', 'value2', 'value3', 'value4', 'value5'], count=1 }, { array=['value7', 'value8', 'value9', 'value10', 'value11'], count=1 }, { array=['value20', 'value21', 'value22', 'value23', 'value24'], count=2 } ];Puedes usar algo como esto.
Recorrí la matriz, uní todos los valores de la matriz excepto el último (id) y luego usé la cadena unida como un valor hash para mi objeto de mapa y luego verifiqué si la identificación es diferente y luego actualicé el conteo, de lo contrario no cambie
const arr = [ ['value1', 'value2', 'value3', 'value4', 'value5', 'id_1'], ['value1', 'value2', 'value3', 'value4', 'value5', 'id_1'], ['value7', 'value8', 'value9', 'value10', 'value11', 'id_3'], ['value20', 'value21', 'value22', 'value23', 'value24', 'id_4'], ['value20', 'value21', 'value22', 'value23', 'value24', 'id_5'], ]; const map = {}; arr.forEach(x => { const key = x.slice(0, -1).join('-'); const id = x.at(-1); if (!map[key]) { map[key] = { count: 1, id, }; } else { if (id !== map[key].id) map[key].count++; } }); console.log(map); const obj = Object.entries(map).map(([k, v]) => ({ array: k.split('-'), count: v.count })) console.log(obj);