0

我做了什么

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

并且这个函数会在每个对象中被调用,就像用户添加一个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];
    }
4

1 回答 1

0

您不需要将这些函数放在数组文字中(是的,无论如何您都无法访问那里的其他属性)。写吧

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);
  }
}

您可以在处理数据的循环中做任何您想做的事情。

于 2020-06-21T16:08:50.930 回答