¿Cómo filtrar este conjunto de objetos en Node.js?
Tengo algunos datos que parecen...
[
{
"element": 1,
"id": 1
},
{
"element": 1,
"id": 2
},
{
"element": 2,
"id": 1
},
{
"element": 2,
"id": 2
},
{
"element": 3,
"id": 1
}
]
Tengo datos como arriba ya que es array de objeto y quiero filtrar como se indica a continuación principalmente en Node.js donde quiero filtrar con elemento y devolver nuevo array. Será útil si consigo alguna solución para esto.
[
{
"element": 1,
"data": [
{
"element": 1,
"id": 1
},
{
"element": 1,
"id": 2
}
]
},
{
"element": 2,
"data": [
{
"element": 2,
"id": 1
}
]
},
{
"element": 3,
"data": [
{
"element": 3,
"id": 1
}
]
}
]
Pregunta hecha hace 3 años, 5 meses, 5 días - Por scriptsphinx
3 Respuestas:
-
Bueno, vamos a conseguir algunas variables en:
const elementsData = [{ element: 0001, id: 1 }, { element: 0001, id: 2 }, { element: 0001, id: 3 }, { element: 0001, id: 4 }, { element: 0002, id: 1 }, { element: 0002, id: 2 }, { element: 0002, id: 3 }, { element: 0003, id: 1 } ]
Primero, necesitarás filtrar los valores de elementos únicos:
const uniqueElements = [] elementsData.forEach(datum => { if (!uniqueElements.includes(datum.element)) { uniqueElements.push(datum.element) } })
Que hacen grupos por singular Elemento
// loop through the unique Elements const output = uniqueElements.map(uniqueElement => { // this will return the object with the specified fields return { // element value element: uniqueElement, // filter through elementsData for matching elements and save then into an array. // You can do sort() here if you want to sort them by id, but this is basically it data: elementsData.filter(elementData => elementsData.element === uniqueElement) } })
Respondida el Dec 17, 2020 a las 16:51 - por techmaestro
Votos positivos: 0 | Votos negativos: 0 -
Puedes lograr el filtrado deseado en Node.js utilizando el método
reduce
para crear un nuevo array con los elementos agrupados por el valor de la propiedadelement
. Aquí te dejo un ejemplo de cómo puedes hacerlo:javascript const data = [ { "element": 1, "id": 1 }, { "element": 1, "id": 2 }, { "element": 2, "id": 1 }, { "element": 2, "id": 2 }, { "element": 3, "id": 1 } ]; const filteredData = data.reduce((acc, obj) => { const found = acc.find(item => item.element === obj.element); if (!found) { acc.push({ element: obj.element, data: [obj] }); } else { found.data.push(obj); } return acc; }, []); console.log(filteredData);
Este código creará un nuevo array
filteredData
que contiene objetos con la propiedadelement
y un arraydata
que contiene todos los objetos que tienen ese mismo valor deelement
. Puedes ajustar este código según tus necesidades y datos reales. ¡Espero que te sea de ayuda!Respondida el Dec 18, 2020 a las 16:54 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
Claro, aquí tienes un ejemplo de cómo filtrar el conjunto de objetos proporcionado en Node.js para devolver el nuevo array deseado:
javascript const data = [ { element: 1, id: 1, }, { element: 1, id: 2, }, { element: 2, id: 1, }, { element: 2, id: 2, }, { element: 3, id: 1, }, ]; const filteredData = data.reduce((acc, curr) => { const existingElement = acc.find(item => item.element === curr.element); if (!existingElement) { acc.push({ element: curr.element, data: [curr], }); } else { existingElement.data.push(curr); } return acc; }, []); console.log(filteredData);
Este código utiliza el método
reduce()
para recorrer el array de objetos original y crear un nuevo array con los elementos filtrados. El acumulador (acc
) se utiliza para almacenar los nuevos objetos filtrados y el valor actual (curr
) se utiliza para determinar si el elemento ya existe en el acumulador. Si el elemento aún no existe, se crea un nuevo objeto con el elemento y los datos actuales. Si el elemento ya existe, se añaden los datos actuales al objeto existente.El resultado final es un array de objetos donde cada objeto representa un elemento único y contiene un array con todos los objetos que comparten el mismo elemento.
Respondida el Dec 18, 2020 a las 17:05 - por Gemini
Votos positivos: 0 | Votos negativos: 0