我做了什么
我在对象的值中调用一个函数。
并且,随着用户添加absent
数据,每个对象中都会调用此函数。
我想做什么
因此,我认识到我可以有成千上万的新对象,我宁愿最小化/消除重复,也不愿每次都编写函数。
解释代码的用途
我想自动设置的函数名称是datesBetween()
.
datesBetween()
可以选择模式,并且它具有参数。
模式引用同一对象中的键reason
的值。arr[0].absent[0].datesBetween
的值应该是datesBetween('leave')('2020-1-1','2020-1-4')
。
参数的作用相同。第一个参数应从同一对象中的对象键start
引用,第二个参数应从对象键end
引用。
一些想法
- 我想这可以使用
class
但我害怕与功能混淆。 如果上课有帮助,请告诉。 - 我写信
this
你,我不确定this
.在此代码中使用this
是否可能是一种解决方案?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]; }
你不需要把这些函数放在数组文字中(是的,无论如何你都无法访问那里的其他属性(。只是写
var arr = [
{
name: "A",
absent: [
{
reason : "leave",
start : '2020-1-1',
end : '2020-1-4',
}, {
reason : "sleepOver",
start : '2020-1-25',
end : '2020-1-26',
}
]
}, {
name: "B",
absent: [
{
reason : "weekendExcursion",
start : '2020-1-18',
end : '2020-1-19',
}
]
}
];
for (const value of arr) {
for (const absence of value.absent) {
absence.datesBetween = datesBetween(absence.reason)(absence.start, absence.end);
}
}
您可以在该循环中执行任何操作,以处理数据。