Si tengo una matriz de objetos con propiedades internas como esta:
var array = [ { "Structure_SortID": "001.001.003", }, { "Structure_SortID": "001.001.003", }, { "Structure_SortID": "001.001.003", }, { "Structure_SortID": "001.001.003", }, { "Structure_SortID": "001.004.002", }, { "Structure_SortID": "001.004.002", } ];¿Cómo puedo reducir esta matriz en una sola matriz 2D que contiene 2 matrices de propiedades "Structure_SortID" coincidentes? La salida debe ser:
var array = [ // Filtered so only 001.004.002 [ { "Structure_SortID": "001.001.003", }, { "Structure_SortID": "001.001.003", }, { "Structure_SortID": "001.001.003", }, { "Structure_SortID": "001.001.003", } ], // Filtered so only 001.004.002 [ { "Structure_SortID": "001.004.002", }, { "Structure_SortID": "001.004.002", } ] ];La solución debe permitir un número infinito de listas con propiedades "Structre_SortID" coincidentes. Y necesita admitir situaciones en las que solo hay 1 matriz de ID coincidentes dentro de la matriz 2D. Y debe admitir matrices vacías o matrices de un solo elemento junto con listas coincidentes dentro de la matriz 2D.
function getArrayOfObjectByKey(data, key) { return Object.values( data.reduce((acc, e) => { if (key in e) { let value = e[key]; if (value in acc) { acc[value].push(e); } else { acc[value] = [e]; } } return acc; }, {}) ); } getArrayOfObjectByKey(array, 'Structure_SortID');