【问题标题】:Track if the user is absent using 2 for loop使用 2 for 循环跟踪用户是否缺席
【发布时间】:2017-11-28 06:43:04
【问题描述】:

我正在创建一个 angularjs 出勤系统,例如,我无法计算员工的缺勤情况。我尝试使用两个 for 循环来解决这个问题,但它仍然给我太多的缺失值。

示例

days.length 的值为 30,来自 11-1-17 - 11-30-17

getDaysInMonth(10, 2017);

function getDaysInMonth(month, year) {

  var date = new Date(year, month, 1);


  console.log('month', month, 'date.getMonth()', date.getMonth());

  while (date.getMonth() === month) {
    days.push(moment(date).format('MM-DD-YYYY'));
    date.setDate(date.getDate() + 1);
  }

  return days;

}

objArray有4个值11-27-2017, 11-28-2017, 11-29-2017, 11-30-2017

控制器(for循环)

for (var y = 0; y < days.length; y++) {
    for (var z = 0; z < objArray.length; z++) {
      if (days[y] === moment(objArray[z].day).format('MM-DD-YYYY')) {
        console.log('exist', days[y]);
      } else {
        console.log('absent'); // giving me a lot of value
      }
    }
  }

编辑

objArray 值

objArray: [
  {
    day: "2017-11-26"
  },
  {
    day: "2017-11-27"
  },
  {
    day: "2017-11-28"
  }
]

【问题讨论】:

  • objArray 是一个字符串数组吗? objArray 代表什么(现在或不在的日子)?
  • @gurvinder372 是的。
  • @gurvinder372 我添加了objArray

标签: javascript angularjs for-loop


【解决方案1】:

如果objArray 已经是一个字符串数组,那么你可以松开内循环

for (var y = 0; y < days.length; y++) {
      if ( objArray.indexOf(days[y]) != -1 ) { //use index of instead of comparing individual values
        console.log('exist', days[y]);
      } else {
        console.log('absent'); 
      }
 }

或者更准确地说

days.forEach(function(day) {
  console.log(day, (objArray.indexOf(day) != -1) ? "exist " + day : "absent");
})

编辑

比较前先将objArray转为字符串数组

objArray = objArray.map( function(item){
   item = item.day.split("-");
   return item[1] + "-" + item[2] + "-" + item[0].slice(-2)
})

演示

var days = ["11-1-17", "11-2-17", "11-3-17", "11-4-17", "11-5-17", "11-6-17", "11-7-17", "11-8-17", "11-9-17", "11-10-17", "11-11-17", "11-12-17", "11-13-17", "11-14-17", "11-15-17", "11-16-17", "11-17-17", "11-18-17", "11-19-17", "11-20-17", "11-21-17", "11-22-17", "11-23-17", "11-24-17", "11-25-17", "11-26-17", "11-27-17", "11-28-17", "11-29-17", "11-30-17" ];

var objArray = [ { day: "2017-11-26" }, { day: "2017-11-27" }, { day: "2017-11-28" } ];

objArray = objArray.map( function(item){
   item = item.day.split("-");
   return item[1] + "-" + item[2] + "-" + item[0].slice(-2)
})

days.forEach(function(day) {
  console.log(day, (objArray.indexOf(day) != -1) ? "exist " + day : "absent");
})

【讨论】:

  • 试过你的回答,但它只是给了我所有absent的价值。
  • @Priz 你能分享objArraydays 的样本吗?需要修剪吗?
  • @Priz 我也添加了一个演示。
  • 我的错误我认为我的arrayObj 值是一堆对象
  • @Priz 你能分享这个对象的确切表示吗?
【解决方案2】:

这里的问题是打印太多值的双循环。 另外,如果您的 objArray 中有类似“11-30-2017”的字符串值,那么这里就有问题

moment(objArray[z].day) 将等于 moment(undefined) 因此,您将始终得到一个只有当前日期的时刻对象。

可以帮助纠正您的打印语句的一个小变化是使用标志

var exist;
for( outer loop condition  )
{
   exist=false;
  for( inner loop condition  ){
  if( condition ){
     exist=true;
     break;
   }
 }
  //Check flag and print absent/exists status
}

【讨论】:

    猜你喜欢
    • 2015-12-18
    • 2023-03-09
    • 2021-03-15
    • 2015-07-28
    • 2011-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-30
    相关资源
    最近更新 更多