JS相同的函数在每个对象值中都有不同的参数.我怎样才能少写?



我做了什么

我在对象的值中调用一个函数。

并且,随着用户添加absent数据,每个对象中都会调用此函数。

我想做什么

因此,我认识到我可以有成千上万的新对象,我宁愿最小化/消除重复,也不愿每次都编写函数。

解释代码的用途

我想自动设置的函数名称是datesBetween().

datesBetween()可以选择模式,并且它具有参数。

模式引用同一对象中的键reason的值。arr[0].absent[0].datesBetween的值应该是datesBetween('leave')('2020-1-1','2020-1-4')

参数的作用相同。第一个参数应从同一对象中的对象键start引用,第二个参数应从对象键end引用。

一些想法

  1. 我想这可以使用class但我害怕与功能混淆。 如果上课有帮助,请告诉。
  2. 我写信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);
}
}

您可以在该循环中执行任何操作,以处理数据。

相关内容

  • 没有找到相关文章

最新更新