Tengo una matriz de categories que tiene el id de valor que estoy tratando de hacer coincidir con mis articles de matriz
Si los articles tienen una identificación coincidente con una de las categories que me gustaría combinarlos en una matriz. Puedo agregar estos objetos a la matriz, pero no coinciden según la identificación.
Aquí hay un ejemplo de categorías:
const categories = [{results: { "id": 28, "name": "Articles" }, { "id": 76, "name": "Projects" } }]Aquí hay un ejemplo de artículos:
const articles = [ { "title": "first article", "content": "lorem ipsum", "categoryId": 28 }, { "title": "second article", "content": "lorem ipsum", "categoryId": 28 }, { "title": "thirdarticle", "content": "lorem ipsum", "categoryId": 76 }, ] Estoy intentando combinar las dos matrices en una. Si es posible, me gustaría que la matriz de articles sea una matriz en ese índice coincidente. Por ejemplo:
const combined = [ { "id": 28, "name": "Articles", "articles:: [ { "title": "first article", "content": "lorem ipsum", "categoryId": 28 }, { "title": "second article", "content": "lorem ipsum", "categoryId": 28 }, ], }, ]; Intenté hacer esto mapeando categorías y usando Object.assign . Los resultados de salida parecen combinar matrices, pero creo que todas están combinadas y no coinciden con la identificación.
¿Cómo puedo lograr esto?
const articles = [ { "title": "first article", "content": "lorem ipsum", "categoryId": 28 }, { "title": "second article", "content": "lorem ipsum", "categoryId": 28 }, { "title": "thirdarticle", "content": "lorem ipsum", "categoryId": 76 }, ] const categories = {results: [{ "id": 28, "name": "Articles"}, {"id": 76, "name": "Projects"}]} let combined = categories.results.map((item, i ) => Object.assign(item, articles)); console.log(combined)Aquí hay una forma de llegar usando su código pero filtrando artículos coincidentes y usando el operador de spread
let combined = categories.results.map(item => ({ ...item, articles: articles.filter(f => f.categoryId == item.id) })); const articles = [{ "title": "first article", "content": "lorem ipsum", "categoryId": 28 }, { "title": "second article", "content": "lorem ipsum", "categoryId": 28 }, { "title": "thirdarticle", "content": "lorem ipsum", "categoryId": 76 }, ] const categories = { results: [{ "id": 28, "name": "Articles" }, { "id": 76, "name": "Projects" }] } let combined = categories.results.map(item => ({ ...item, articles: articles.filter(f => f.categoryId == item.id) })); console.log(combined)