Tengo una matriz de objetos que se parece a lo siguiente:
[ { "node_name": "node1", "external": "external_node1", "status": "online", "Date": "2022-05-26 08:20:27.022313" }, { "node_name": "node2", "external": "external_node2", "status": "offline", "Date": "2022-05-26 20:20:27.022313" }, { "node_name": "node3", "external": "external_node3", "status": "online", "Date": "2022-05-26 08:20:27.022313" }, { "node_name": "node4", "external": "external_node4", "status": "online", "Date": "2022-05-26 20:20:27.022313" } ] Usando JavaScript, ¿cómo 'agruparía' e insertaría en su propia matriz, todos los objetos que tienen valores de Date coincidentes?
Por ejemplo, el nodo 1 y el node3 tienen " node1 "2022-05-26 08:20:27.022313" como su valor de Date , así como el node2 2 y el node4 4 tienen el mismo valor de Date .
¿Cómo ordenaría estos objetos y los insertaría en una matriz si los valores de Date coincidieran?
Puede lograrlo usando una combinación de ordenar y reducir:
const data = [ { "node_name": "node1", "external": "external_node1", "status": "online", "Date": "2022-05-26 08:20:27.022313" }, { "node_name": "node2", "external": "external_node2", "status": "offline", "Date": "2022-05-26 20:20:27.022313" }, { "node_name": "node3", "external": "external_node3", "status": "online", "Date": "2022-05-26 08:20:27.022313" }, { "node_name": "node4", "external": "external_node4", "status": "online", "Date": "2022-05-26 20:20:27.022313" } ]; const result = data.sort((a,b) => Date.parse(a.Date) - Date.parse(b.Date)). reduce((acc, data) => { const date = data.Date; acc[date] = acc[date] || []; acc[date] = [...acc[date], data]; return acc; }, {}) console.log(result);Sugeriría usar Array.reduce() para convertir la entrada a la forma deseada.
Puede envolver esto en una función groupBy() . Esto devolverá un objeto con una matriz de objetos para cada valor encontrado.
const input = [ { "node_name": "node1", "external": "external_node1", "status": "online", "Date": "2022-05-26 08:20:27.022313" }, { "node_name": "node2", "external": "external_node2", "status": "offline", "Date": "2022-05-26 20:20:27.022313" }, { "node_name": "node3", "external": "external_node3", "status": "online", "Date": "2022-05-26 08:20:27.022313" }, { "node_name": "node4", "external": "external_node4", "status": "online", "Date": "2022-05-26 20:20:27.022313" } ] function groupBy(arr, key) { return arr.reduce((acc, el) => { acc[el[key]] = [...(acc[el[key]] || []), el]; return acc; }, {}) } const result = groupBy(input, 'Date'); console.log('Result:', result) .as-console-wrapper { max-height: 100% !important; }Use el método .filter() de javascript.
const newArray = oldArray.filter(data => { return data.Date == "2022-05-26 08:20:27.022313" })Esto devolverá todos los objetos con valor de fecha como el anterior (2022-05-26 08:20:27.022313), es decir, nodo1 y nodo3 en una matriz diferente.