Tengo problemas para acceder a las claves/valores/entradas en un objeto (matriz), cambiando ligeramente ese objeto y empujándolo a un nuevo objeto vacío (newArray). Puedo acceder a las claves, valores y entradas, pero no puedo cambiarlos.
El siguiente código funciona bien, pero me gustaría hacerlo menos específico y más genérico para poder usar esta función también en otros lugares.
Intenté usar Object.keys(), Object.values() y Object.entries(), junto con keyof typeof x pero fue en vano ya que .replace() no funcionará en el objeto.
El objeto se descarga como un CSV y uso comillas dobles para separar los campos, ya que los campos pueden contener comas y eliminarán los campos CSV si se mantienen.
let array = typeof objArray != 'object' ? JSON.parse(objArray) : objArray; let newArray = []; array.forEach(s => { let x = JSON.parse(JSON.stringify(s)); x.addressLine1 = x.addressLine1.replace(x.addressLine1, `"${x.addressLine1}"`); x.addressLine2 = x.addressLine2 ? x.addressLine2.replace(x.addressLine2, `"${x.addressLine2}"`) : ''; x.town = x.town.replace(x.town, `"${x.town}"`); x.postcode = x.postcode.replace(x.postcode, `"${x.postcode}"`); newArray.push(x); });Intento con keyof typeof:
array.forEach(s => { let x = JSON.parse(JSON.stringify(s)); let property: keyof typeof x; for (property in x) { property = property ? property.replace(property, `"${property}"`) : ''; newArray.push(x);El objeto debería verse así:
{ "addressLine1": "\"The Road\"", "addressLine2": "", "town": "\"London\"", "postcode": "\"SE1 5QH\"", }Podría intentar no "enredar" sus objetos y hacerlo directamente desde el objeto.
Tal vez algo como esto (te dejo un ejemplo de trabajo aquí): https://codesandbox.io/s/dark-dawn-w85z3
let objArray = [ { addressLine1: "anothernamefieldexampleline1", addressLine2: "exampleline2", town: "exampletown1", postcode: "examplepostcode1" }, { addressLine1: "exampleline1b", addressLine2: "exampleline2b", town: "exampletown1b", postcode: "examplepostcodeb" } ]; let array = typeof objArray != "object" ? JSON.parse(objArray) : objArray; let newArray = array.map((_itemObject) => { let returnObject={}; let arrayKeyProperties = []; for (const key in _itemObject) { arrayKeyProperties.push(key); }; console.log(arrayKeyProperties); arrayKeyProperties.forEach( (_prop) => returnObject[_itemObject[_prop]] = _itemObject[_prop] ); return returnObject; }); console.log(newArray);Muestro la imagen de salida, con la matriz creada con nuevos objetos con nuevos nombres de campo (según el valor de los antiguos).