Tengo una matriz de objetos que recibo de la API que se ve así:
Array [ Object { "OPTIONNUMBER": "1", "OPTIONVALUE": "Here is your name ", }, Object { "OPTIONNUMBER": "2", "OPTIONVALUE": "Footer", }, Object { "OPTIONNUMBER": "3", "OPTIONVALUE": "https://google.com", }, ] cómo asignarlo a un objeto con un nombre específico como [OPTIONNAME]: OPTIONVALUE ;
el modelo se ve así:
export interface IOptions { opt1NAME: string; opt2FOOTER_TEXT: string; opt3LINK: string; }el resultado final debería ser así:
const options = { opt1NAME: 'Here is your name'; opt2FOOTER_TEXT: 'Footer'; opt3LINK: 'https://google.com'; } Estoy tratando de map y assign , pero no se me ocurre cómo mapear correctamente los nombres de los objetos.
edit1:
//appOptions here is an array of string that contains names let options = {}; for (let i = 0; i < appOptions.length; i++) { Object.assign(options, {[appOptions[i]]:arr[i].OPTIONVALUE }); }esto funciona como si me diera el objeto correcto pero no se escribió correctamente.
prueba esto
const options = []; const op = ["opt1Name","opt2FOOTER_TEXT","opt3LINK"] // you can list all your needed options in op and it will work for (let index = 0; index < x.length; index+=3) { const option:{[key:string]:any} = {}; // x is the name of your api result const elements = x.slice(index,index+3); elements.forEach((ele,idx)=>{ option[op[idx]]=ele.OPTIONVALUE }) options.push(option) }la solución fue crear un objeto vacío con contenido vacío (se usará para el contexto de todos modos):
export const initOptions: IOptions = { opt01FOOTER: '', opt02FOOTER_TEXT: '', opt03LINK: '', }luego en función donde queremos reestructurar:
let options: IOptions = initOptions; const keys = Object.keys(options) as Array<keyof IOptions>; //arr is the array with names and values for (let i = 0; i < arr.length; i++) { //Object.assign() works here as well options[keys[i]] = arr[i].OPTIONVALUE; } ahora podemos usar fácilmente options con nombres descriptivos:
console.log(options.opt02FOOTER_TEXT); si el número de opciones aumenta, tenemos que agregar una entrada más al modelo y un par clave-valor vacío a initOptions
Estaba tratando de encontrar una solución en torno a la creación de un objeto vacío, abierto para una mejor solución con options escritas