Me preguntaba cómo puedo filtrar los valores "etiquetas" en el json anterior usando una función de flecha:
const ttag = [{ "code": 795302828, "code_integration": "123", "company": "ACME LTD", "phone": "135575788", "tags": [{"tag": "companyAA"}, {"tag": "companyBB"}, {"tag": "companyCC"}, {"tag": "companyDD"} ], "status": "Y" }] const onlyTags = ttag.filter(f => f.tags) console.log(onlyTags)resultado esperado: ['companyAA', 'companyBB', 'companyCC', 'companyDD']
En primer lugar, no es así como funciona el método de filter . Filter devuelve una matriz con valores que son true para la función pasada como argumento. Más puedes leer aquí .
Podrías usar map & flatMap , así:
ttag.flatMap(f => f.tags.map(t => t.tag)); map devuelve una matriz de valores especificados en el método pasado. flatMap hace lo mismo, pero si el resultado es una matriz, la aplana, por lo que el resultado es una matriz de cadenas en lugar de una matriz de matrices de cadenas.
flatMap no es compatible con Internet Explorer, pero ya no es un navegador compatible, por lo que no me molestaría.
Tal vez sea una forma fea de hacerlo, pero con el primer .map obtienes cada elemento de la matriz principal y con el segundo .map una matriz de etiquetas dentro de él.
const ttag = [{ "code": 795302828, "code_integration": "123", "company": "ACME LTD", "phone": "135575788", "tags": [{"tag": "companyAA"}, {"tag": "companyBB"}, {"tag": "companyCC"}, {"tag": "companyDD"} ], "status": "Y" }] const onlyTags = ttag.map(f => f.tags.map(t => t.tag)); console.log(onlyTags); console.log(onlyTags[0]); // expected outputAquí hay una solución usando map y reduce. Al final, la matriz se aplana, por lo que solo devuelve una matriz que contiene los nombres de las ciudades.
const ttag = [{ "code": 795302828, "code_integration": "123", "company": "ACME LTD", "phone": "135575788", "tags": [{ "tag": "companyAA" }, { "tag": "companyBB" }, { "tag": "companyCC" }, { "tag": "companyDD" } ], "status": "Y" }] const result = ttag.map(obj => obj.tags.reduce((acc, next) => [...acc, next.tag], [])).flat() console.log(result)