I have the following function
const exampleFunction = (var1, var2, var3) => {
return const targetObject = {
var1,
var2,
var3,
},
};
var2 and var3 are optional variables.
If all 3 variables were send to this function, then I need to return object with 3 fields.
If var2 is undefined, I need to return object with 2 fields only. If var3 is undefined, I need to return object with 2 fields only.
If var2 and var3 are undefined, I need to return object with 1 field only.
I have the following function
const exampleFunction = (var1, var2, var3) => {
return const targetObject = {
var1,
var2,
var3,
},
};
var2 and var3 are optional variables.
If all 3 variables were send to this function, then I need to return object with 3 fields.
If var2 is undefined, I need to return object with 2 fields only. If var3 is undefined, I need to return object with 2 fields only.
If var2 and var3 are undefined, I need to return object with 1 field only.
Share Improve this question edited Aug 23, 2018 at 5:53 Mario 4,9963 gold badges42 silver badges62 bronze badges asked Aug 22, 2018 at 5:28 D.MarkD.Mark 5972 gold badges11 silver badges24 bronze badges 3- 1 Create the object. Add properties if-they-are-defined. In this case (if var2 is always defined 'before' var3, eg, it would be simpler) one could also create a few different 'defined' permutations. Also, maybe just an array..? – user2864740 Commented Aug 22, 2018 at 5:30
-
With your
If var2 is undefined, I need to return object with 2 fields only
it sounds as ifundefined
is specifically being passed as an argument? EgexampleFunction('foo', undefined, 'bar')
? Seems odd – CertainPerformance Commented Aug 22, 2018 at 5:32 - @CertainPerformance When the value es from another variable, it's not odd. Say for example, var1,2,3 es from form elements, or from an API call in NodeJs – Pubudu Dodangoda Commented Aug 22, 2018 at 6:26
4 Answers
Reset to default 2try this:
const exampleFunction = (var1, var2, var3) => {
const targetObject = {};
if (var1) targetObject.var1 = var1;
if (var2) targetObject.var2 = var2;
if (var3) targetObject.var3 = var3;
return targetObject;
};
Use JSON.parse
together with JSON.stringify
since JSON.stringify
will skip undefined
, Function
, and Symbol
during the conversion. If those types are in an array, they will be automatically censored to null
in that array by JSON.stringify
.
const exampleFunction = (var1, var2, var3) => JSON.parse(JSON.stringify({
var1,
var2,
var3
}))
const outputs = exampleFunction(undefined, 2, undefined)
console.log(outputs)
Outputs: { var2: 2 }
I would suggest you to build the object and then get rid of the undefined values
const targetObj = {var1, var2, var3}
Object.keys(targetObj).forEach((key) => (targetObj[key] == null) && delete targetObj[key]);
Using JSON stringify and parse looks good if you are guaranteed that var1,2,3 are primitive variables. Otherwise they will be converted to strings(For instance Date Objects).
If it is not an inconvenience to use the traditional function statement you could try
function anotherExampleFunction(var1, var2, var3) {
return Object.assign({}, Array.from(arguments).filter(argument => argument !== undefined));
}
const result1 = anotherExampleFunction(1, 2, 3);
const result2 = anotherExampleFunction(1, 2, undefined);
const result3 = anotherExampleFunction(1, undefined, 3);
const result4 = anotherExampleFunction(1, undefined, undefined);
console.log(result1, result2, result3, result4)
output
{ '0': 1, '1': 2, '2': 3 } { '0': 1, '1': 2 } { '0': 1, '1': 3 } { '0': 1 }