javascript: recorre las claves de objeto y agrega una cadena a la clave

CorePress2024-01-25  10

Tengo un objeto de configuración. Usando este objeto de configuración, completo los elementos requeridos agregando una cadena a la clave de este objeto. Necesito ayuda para actualizar los valores

const MEMBER_INITIAL_VALUE = {
  type: '',
  dateOfBirth_: '',
  seekingCoverage_: true,
  relationshipToPrimary: ''
}; 

const updateInitialValue = (type, relationshipToPrimary) => { 
  var newMemberObjValue = JSON.parse(JSON.stringify(MEMBER_INITIAL_VALUE));
  let updateValue =  Object.entries(newMemberObjValue).forEach(([key, value]) => {
      [`${key}_${type}`]: value; //I'm stuck here. not sure how to proceed
      delete key;

  });
  return updateValue;
};

updateInitialValue = ('applicant', 'SELF');
updateInitialValue = ('spouse', 'DEPENDANT');
Resultado Esperado:
{
  type: 'applicant',
  dateOfBirth_applicant: '',
  seekingCoverage_applicant: true
  relationshipToPrimary: 'SELF'
}; 
{
  type: 'spouse',
  dateOfBirth_spouse: '',
  seekingCoverage_spouse: true
  relationshipToPrimary: 'DEPENDANT'
};

Tengo curiosidad sobre el diseño general de este enfoque. Dado que tiene el tipo como propiedad del objeto, ¿por qué necesita actualizar las claves del objeto para incluir el tipo? Dependiendo de cómo se use este objeto, ese es un enfoque frágil, ya que requiere una sobrecarga de mantenimiento para mantener las claves del objeto alineadas con elescriba en todo momento. Además, en mi opinión, eliminar claves huele a código.

-algo inteligente

28/03/2021 a las 15:01

@somewhatsapient Necesito actualizar este objeto porque estas claves están asociadas con la casilla de verificación. A medida que se actualiza la casilla de verificación, estos valores deben actualizarse.

- libélula

28/03/2021 a las 15:06

pero en realidad no estás actualizando el objeto inicial, ¿correcto?

-algo inteligente

28/03/2021 a las 15:10

No estoy actualizando el objeto inicial

- libélula

28/03/2021 a las 15:51



------------------------------------

Dado que no estás actualizando el objeto original, puedes simplificar esto enormemente:

const MEMBER_INITIAL_VALUE = {
  type: '',
  dateOfBirth_: '',
  seekingCoverage_: true,
  relationshipToPrimary: ''
};

const updateInitialValue = (type, relationshipToPrimary) => ({
  type,
  relationshipToPrimary,
  [`dateOfBirth_${type}`]: MEMBER_INITIAL_VALUE.dateOfBirth_,
  [`seekingCoverage_${type}`]: MEMBER_INITIAL_VALUE.seekingCoverage_
});

let updatedValue = updateInitialValue('applicant', 'SELF');
updatedValue = updateInitialValue('spouse', 'DEPENDANT');



------------------------------------

Esto debería funcionar:

const MEMBER_INITIAL_VALUE = {
  type: '',
  dateOfBirth_: '',
  seekingCoverage_: true,
  relationshipToPrimary: ''
};

const updateInitialValue = (type, relationshipToPrimary) => {
    let newMemberInitialValue = JSON.parse(JSON.stringify(MEMBER_INITIAL_VALUE));
  Object.keys(newMemberInitialValue).forEach((key) => {
    if(!['type', 'relationshipToPrimary'].includes(key)) {
        newMemberInitialValue[`${key}_${type}`] = newMemberInitialValue[key];
     delete newMemberInitialValue[key];
    }
  });
  newMemberInitialValue.type = type;
  newMemberInitialValue.relationshipToPrimary = relationshipToPrimary;
  console.log(newMemberInitialValue);
};

let applicantValues = updateInitialValue('applicant', 'SELF');
let spouseValues = updateInitialValue('spouse', 'DEPENDANT');

EDITAR: no se devolvió el valor de la función y luego se asignó a una nueva variable.

3

Esto es demasiado complejo y también dará como resultado claves como seekCoverage__type con un doble guión bajo. Además, ¿qué estás haciendo con el valor de retorno de este objeto?

& ndash; algo inteligente

28/03/2021 a las 15:30

También recomendaría no utilizar el enfoque de JSON.parse(JSON.stringify(object)) para hacer una copia de un objeto, ya que los métodos de encadenamiento y análisis corren el riesgo de modificar cadenas de claves o valores. -algo inteligente

28/03/2021 a las 15:33

1

por supuesto, el valor devuelto debe almacenarse en una variable. METROMi objetivo principal era centrarse en la función en sí. Aunque editaré mi respuesta con el valor devuelto almacenado en una variable para no hacerlo confuso.

-famoha

28/03/2021 a las 15:34



------------------------------------

Aunque ya se han publicado algunas respuestas, me gustaría sugerir una similar que hace lo mismo de una manera mucho más clara y concisa:

function Member() {
  this.type = '';
    this.dateOfBirth = '';
    this.seekingCoverage = true;
    this.relationshipToPrimary = '';
}

function UpdateInitialValue(type, relationshipToPrimary) {
  var newMember = new Member();
  newMember.type = type;
  newMember.relationshipToPrimary = relationshipToPrimary;
  return newMember;
}

console.log(UpdateInitialValue('applicant', 'SELF'));
console.log(UpdateInitialValue('spouse', 'DEPENDANT'));

Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare