As you can see in the example below, I partially refactored the code so okFields useokFields
uses the extracted function checkStringLength.
Now I also want problemFields()problemFields()
to use the same refactored function, but there is differencea difference between how okFields and problemFields use the function: you see that the problemFieldsproblemFields
has a little '!'!
in front of validatorvalidator
, and I don't know how to have this vary from the same extracted function. How would you do it avoid the duplicate code?
function stringLengthValidation( mergedModelAndFormFields ) {
let fieldsToValidate = mergedModelAndFormFields.okFields
// extracted function
function checkStringLength() {
return _.pickBy( fieldsToValidate, ( value ) => {
return validator.isLength( value[ 'content' ], {
'min': value[ 'validation' ].minLength,
'max': value[ 'validation' ].maxLength
} )
} )
}
let okFields = checkStringLength()
// I want to replace this with checkStringLength()
let problemFields = _.pickBy( fieldsToValidate, ( value ) => {
// see the '!' here that is the variation
return !validator.isLength( value[ 'content' ], {
'min': value[ 'validation' ].minLength,
'max': value[ 'validation' ].maxLength
} )
} )
return {
'okFields' : okFields,
'problemFields': problemFields
}
}