Tengo un método debajo que está en un componente Ecma 6 (Salesforce Lightning Web Components si alguien tiene curiosidad). Lo he agregado aquí porque esto es más JavaScript que una pregunta de LWC. ¿Es esta la mejor manera de realizar la tarea?
Tengo dos matrices, ambas son de objetos: quiero comparar las matrices y crear una nueva matriz de objetos que tenga una nueva propiedad required: true o required: false . ¿Es esta la manera más eficiente de hacer esto?
const RequiredFields = [ { fieldApiName: 'FirstName', value: 'Test' } , { fieldApiName: 'LastName', value: 'LastNameTest' } ] const AllFields = [ { fieldApiName: 'FirstName', value: 'Test' } , { fieldApiName: 'LastName', value: 'LastNameTest' } , { fieldApiName: 'Suffix', value: '' } ] addRequiredFields(RequiredFields, Allfields) { RequiredFields.forEach(field => { field.required = true; }); Allfields.forEach(field => { var hasVal = Object.values(field).includes(true); if (hasVal) { console.log(field.fieldApiName + ' = TRUE'); } else { field.required = false; } console.log(field); }); return Allfields; } console.log ( addRequiredFields(RequiredFields, Allfields) ) output = [ { fieldApiName: FirstName, value: 'Test' , required: true} , { fieldApiName: LastName, value: 'LastNameTest' , required: true} , { fieldApiName: Suffix, value: '', required: false } ]haz eso, usa Array.some()
const RequiredFields = [ { fieldApiName: 'FirstName', value: 'Test' } , { fieldApiName: 'LastName', value: 'LastNameTest' } ] , Allfields = [ { fieldApiName: 'FirstName', value: 'Test' } , { fieldApiName: 'LastName', value: 'LastNameTest' } , { fieldApiName: 'Suffix', value: '' } ]; function addRequiredFields( ReqF , data) { data.forEach( row => row.required = ReqF.some( x => x.fieldApiName === row.fieldApiName ) ) } addRequiredFields( RequiredFields, Allfields ) console.log ( Allfields ) .as-console-wrapper { max-height: 100% !important; top: 0 }Algunos comentarios:
var hasVal = Object.values(field).includes(true); podría causar errores porque devolverá verdadero si a alguna tecla se le asigna el valor true . Solo queremos verificar el valor asignado a la clave required .AllFields , intente .map() para devolver una nueva matriz. La programación inmutable tiene una simplicidad que generalmente hace que sea más fácil de seguir. Aquí hay una solución más simple usando .map() y .some()
const RequiredFields = [ { fieldApiName: 'FirstName', value: 'Test'}, { fieldApiName: 'LastName', value: 'LastNameTest' } ]; const AllFields = [ { fieldApiName: 'FirstName', value: 'Test'}, { fieldApiName: 'LastName', value: 'LastNameTest' }, { fieldApiName: 'Suffix', value: ''} ]; const result = AllFields.map(field => ({ ...field, required: RequiredFields.some( ({fieldApiName}) => fieldApiName === field.fieldApiName ) })); console.log('result', result);