What I did
I call a function in objects' value.
And this function would be called in every object as much as users add an absent data.
What I want to do
Hence I recognize that I could have thousands of hundred of new object, I would rather minimize/eliminate duplication than write the function every time.
Explain what the code is for
The function's name I would like to auto-set is datesBetween().
datesBetween() can choose the mode, and it has parameters.
The mode refers the value from the key reason which is in same object. arr[0].absent[0].datesBetween's value should be datesBetween('leave')('2020-1-1','2020-1-4').
The parameters does same. First parameter should refer from the object key start which is in same object, second parameter should refer from the object key end.
Some idea
- I guess this could use
classbut I am afraid to mix up with functions. if class would help, please do tell. - I write
thisthou, I am uncertain aboutthis. Is usingthiscould be a solution in this code?var arr = [ { name : "A", absent :[ { reason : "leave", start : '2020-1-1', end : '2020-1-4', datesBetween : datesBetween('leave')(this.start, this.end) }, { reason : "sleeOver", start : '2020-1-25', end : '2020-1-26', datesBetween : datesBetween('sleeOver')(this.start, this.end) } ] }, { name : "B", absent :[ { reason : "weekendExcursion", start : '2020-1-18', end : '2020-1-19', datesBetween : datesBetween('weekendExcursion')(this.start, this.end) } ] } ] function autoAbsentSetter(){ //do I need class to use inheritance/property things? } function addAbsent(mode){ var funcs = { 'leave' : function absent_leave(name, absentName, absentStart, absentEnd){ //all kinds of leave are included. Detail further. //some codes }, 'sleepOver' : function absent_sleepOver(name, absentName, absentStart, absentEnd){ //some codes }, 'weekdayExcursion' : function absent_weekdayExcursion(name, absentName, absentStart, absentEnd){ //some codes }, 'weekendExcursion' : function absent_weekendExcursion(name, absentName, absentStart, absentEnd){ //some codes } } return funcs[mode]; }
You don't need to put those functions inside the array literal (and yes, you cannot access the other properties there anyway). Just write
You can do whatever you want in that loop processing your data.