I have below forEach loop
this.cfData.customAttributes.forEach(function (currentObj) {
if(currentObj.inputValues !== null) {
currentObj.inputValues = Array.prototype.map.call(currentObj.inputValues, function(item) { return item.value; }).join(", ");
}
if(currentObj.objectType !== null){
currentObj.objectType = currentObj.objectType.toLowerCase().replace(/(^\w{1})|(\s{1}\w{1})/g, match => match.toUpperCase());
}
if(currentObj.dataType !== null){
currentObj.dataType = currentObj.dataType.toLowerCase().replace(/(^\w{1})|(\s{1}\w{1})/g, match => match.toUpperCase());
}
if(currentObj.isGridEligible !== null){
currentObj.isGridEligible = currentObj.isGridEligible.toLowerCase().replace(/(^\w{1})|(\s{1}\w{1})/g, match => match.toUpperCase());
}
if(currentObj.isInvoiceEligible !== null){
currentObj.isInvoiceEligible = currentObj.isInvoiceEligible.toLowerCase().replace(/(^\w{1})|(\s{1}\w{1})/g, match => match.toUpperCase());
}
});
I was wondering is there any shortest way of writing these if conditions within the loop? Please suggest.
I will be answering to a more generic code, if you allow me:
{}) around the ifs can be removed.objArr.forEach(obj => {
if(obj.propA !== null)
obj.propA = getPropA(obj);
if(obj.propB !== null)
obj.propB = getPropB(obj);
...
});
getPropA, getPropB and so on).const getProps = {
propA(obj){ return ...; },
propB: obj => ...,
...
};
objArr.forEach(obj => {
// Object.entries receives an object, and returns an array
// in the form [ key, value ][]
for(var [ prop, getter ] of Object.entries(getProps))
if(obj[prop] !== null)
obj[prop] = getter(obj);
});
I can recommend this code which is way simpler and shorter.
this.cfData.customAttributes.forEach(function (currentObj) {
const arr = ["objectType", "dataType", "isGridEligible", "isInvoiceEligible"];
if (currentObj.inputValues !== null) {
currentObj.inputValues = Array.prototype.map.call(currentObj.inputValues, function (item) {
return item.value;
}).join(", ");
}
arr.forEach(item => {
if (currentObj[item] !== null) {
currentObj[item] = currentObj[item].toLowerCase().replace(/(^\w{1})|(\s{1}\w{1})/g, match => match.toUpperCase());
}
});
});