console.log(value) { List: [ { id: 1 title: 'hi', content: [ { id: 1, functionId: 11, } ] } { id: 2, title: 'minsu', content: [] } ] } Quiero eliminar el objeto si no hay una matriz de contenido.
Estoy creando una variable llamada control y emitiéndola usando la función de mapa interna. Si los objetos sin matriz de contenido deben eliminarse aplicando una condición de filtro, no sé cómo hacerlo.
let control: any[any] = [ value.map((value: any) => { return { id: value?.id, title: value?.title, content: value?.content[0].functionId } }) ]Pero ahora, cuando hago console.log(control), ocurre un error porque el segundo objeto no tiene contenido.
Quiero eliminar el segundo objeto sin contenido e imprimirlo así.
console.log(control) [ id: 1, title: 'hi', functionId: 11 ]Primero filter los elementos con una matriz de contenido de longitud 0 o la matriz de contenido no existe y luego map para transformarla
const List = [ { id: 1, title: 'hi', content: [ { id: 1, functionId: 11, } ] }, { id: 2, title: 'minsu', content: [] } ] const control = List .filter(({content}) => content?.length) .map(({id,title,content:[{functionId}]}) => ({id,title,functionId})) console.log(control)Filtre la lista de origen de la manera que necesita y vuelva a aplicar la lista filtrada como nuevo valor
const sourceObject = { list: [ { id: 1, title: 'hi', content: [ { id: 1, functionId: 11, } ] }, { id: 2, title: 'minsu', content: [] } ] }; const filteredList = sourceObject.list.filter(element => ( typeof(element.content) === 'object' && element.content.length > 0 )); sourceObject.list = filteredList; console.log(sourceObject);Usualmente uso reduce para resolver problemas como este
const items = [ { id: 1, title: 'hi', content: [ { id: 1, functionId: 11, } ] }, { id: 2, title: 'minsu', content: [] } ]; const result = items.reduce((rs, item) => { const functionId = item?.content?.[0]?.functionId; if (functionId) { rs.push({ id: item.id, title: item.title, functionId }) } return rs; }, []) console.log(result)