Tengo una matriz de objetos en mis registros DB.
El record:
{"ID123":{"FileID":"12345","FileName":"ABCFile_ver5_44453.PDF"},"DocID":6009,"DocFormat":"PDF"}El formato para almacenar el nombre de archivo en mi base de datos siempre es "FileName": "actual_fileName.PDF" .
Solo quiero obtener el objeto con "FileName":"....", para mostrar solo el nombre del archivo en lugar de otros objetos.
Este es mi código:
getValue(): Atts[] | any { if (this.isEmptyValue()) { return []; } return !this.useObject ? this.value : Object.entries(this.value).map(([key, value]) => ({ key, value })).filter(value=); }¿Cómo filtro el objeto que contiene "Nombre de archivo" para poder mostrar el nombre de archivo en mi aplicación? Estoy atascado en el método de filtro.
Tuve que reducir un poco su código a un ejemplo mínimo reproducible , y this.value que este valor en sus entradas de Objeto es el registro de base de datos completo que ha enumerado anteriormente. Convertí esto en un objeto para poder procesarlo en mi código. Por lo tanto, su millaje puede variar si mi suposición fuera incorrecta.
let obj = { "ID123": { "FileID": "12345", "FileName": "ABCFile_ver5_44453.PDF" }, "DocID": 6009, "DocFormat": "PDF" }; let result = { "FileName": Object.entries(obj).map(([key, value]) => ({ key, value })).filter(keyValuePair => { if (keyValuePair.value.FileName) { return true; } })[0].value.FileName };Esto devuelve:
{ "FileName": "ABCFile_ver5_44453.PDF" }Su paso de filtro es filtrar una matriz de pares de valores clave, por lo que al filtrar, debe devolver verdadero solo si el 'valor' es un objeto que tiene una propiedad de FileName.
EDITAR:
Me di cuenta de que la forma en que escribí esto no funcionará si el objeto devuelto de la matriz no tiene valor (o no está definido), por lo que probablemente sea una mejor idea almacenar esto primero en una variable y luego devolver un objeto basado en eso. variable, así:
let fileNameObj = Object.entries(obj).map(([key, value]) => ({ key, value })).filter(keyValuePair => { if (keyValuePair && keyValuePair.value.FileName) { return true; } })[0]; if (fileNameObj && fileNameObj.FileName) { let result = { "FileName": fileNameObj.FileName }; }