循环迭代,在数组中包含一组值

时间:2015-11-17 14:17:44

标签: javascript angularjs

要求是使用数组中的一组值进行迭代。

$scope.weekArray=["Sun","Mon","Tue","Wed","Thurs","Fri","Sat"];

我有一个以前的持续时间值和当天。如果之前的持续时间值是5,我需要找出当天前5天的索引。 例如: 如果当天是星期一,我需要在星期一前5天找到。答案是星期四(包括星期一)。请让我知道如何做到这一点。

5 个答案:

答案 0 :(得分:2)

可以使用模块化int **ptrMatrix = new int*[row]; for (int i = 0; i < row; i++) ptrMatrix[i] = new int[column]; 运算符对Javascript中的数组进行循环迭代。

%array.length一起,您可以使用以下内容执行操作:

array.indexOf()

这是一个有效的jsFiddle:https://jsfiddle.net/hf4zqnwu/3/

答案 1 :(得分:0)

我不会为你编写代码,因为我觉得这是一项学校作业,但为什么不尝试以下x =今天之前的天数:

  1. 获取当天的索引。
  2. 而x < 7,x = x - 7.
  3. 如果前几天=== 0,则返回当前日期。
  4. 如果当天的指数&gt; x当天返回日 - x。
  5. 否则,在指数当日返回日+(7 - x)

答案 2 :(得分:0)

只使用模运算:

(indexOf_currentday - days)%7 = indexOf_searchedDay

在你的例子中,星期一有索引1  (1-5)%7 = -4%7 = 4%7 = 4

答案 3 :(得分:0)

//almost same but without array manipulation
var weeksize = 7;
var getDayBeforeIncluding = $scope.getDayBeforeIncluding = function(current, delta){ //current -number of day, delta- days       before 
    var realdelta = delta % weeksize;
    var result = current - realdelta;
    result = result > 0 ? result : (weeksize + result + 1); //+1 including
    return result;
 }

 var myday = getDayBeforeIncluding (1,5); // 5 days before monday including == 4
 console.log(""+myday+"== 4");


 //and more smart version both for strings and numbers with argument checking and both including and not including
 var weekArray = $scope.weekArray= "Sun","Mon","Tue","Wed","Thurs","Fri","Sat"];
 var weeksize = weekArray.length; //no more magic strings
 var getDayBefore = $scope.getDayBefore = function(current, delta, including){ //current -number of day, delta- days       before
    if(null==current){ 
       throw "no day provided";
    }   
    if(typeof(current)=='string'){
       current = weekArray.indexOf(current);
    }
    if(typeof(current)!='number'){
        throw "invalid day type";
    }
    if (current < 0 || current > weeksize) {
        throw "invalid current value";
    }
    var includedelta = including ? 1: 0;
    var realdelta = delta % weeksize;
    var result = current - realdelta;
    result = result > 0 ? result : (weeksize + result + includedelta ); //+1 including
    return result;
 }

答案 4 :(得分:0)

我可以想到两种方式。这看起来很像家庭作业,所以我不打算为你拼出来,如果不是,请道歉:P

模块化算术

JavaScript有一个模块化运算符(%),对于这样的东西很有用。

\<[a-zA-Z0-9\s\=\":\.]+\>(.*)<\/[a-zA-Z\:]+>

您可以将其用于&#34;循环&#34;正确的价值。请记住,回溯7天与返回21天相同。

需要注意的重要一点是,如果您最终得到负数,模块化算术对您不起作用,因此为避免出现问题,您可能需要在首先减去的数字上加7。 / p>

如果您这样做,您应该能够处理任何持续时间(即使返回的持续时间是123443434124123天)。做错了,你可能会在7岁以上的任何时间内遇到错误:)

使用计数器

循环

使用for循环或while循环,计算您需要返回的持续时间(如果您想要返回5天,则从5到0)。从开始日开始,每次从索引中减去1。当索引超出数组中有效索引的范围时,循环回到结束值。也就是说,每次到0时,都要回到7.你最后得到的数字应该是你的目标指数。