2015-11-17 77 views
1

要求是使用數組中的一組值進行迭代。循環迭代使用數組中的一組值

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

我有一個以前的持續時間值和當前日期。如果前一個持續時間值是5,我需要找出當天前5天的指數。 例如: 如果當天是星期一,我需要在星期一前5天找到。答案將是星期四(包括星期一)。請讓我知道如何做到這一點。

+0

你有沒有在自己的解決方案的任何地方?這將有助於有東西來調試:) – Scott

+0

不,我沒有解決方案 – Roopa

+0

@Roopa我的答案是否適合你? –

回答

2

使用模塊化的%運算符可以在Javascript中對數組進行循環迭代。

array.length

一起和array.indexOf(),你可以做你想要使用的是什麼:

$scope.weekArray=["Sun","Mon","Tue","Wed","Thurs","Fri","Sat"]; 
var currentDay = "Mon"; 
var indexOfCurrentDay = $scope.weekArray.indexOf(currentDay); 
var whatYouWant = (indexOfCurrentDay-previous_duration); 
//note that modulo does not work with negative numbers. 
while (whatYouWant < 0) 
    whatYouWant += $scope.weekArray.length; 
whatYouWant = whatYouWant % $scope.weekArray.length; 

這裏是一個工作的jsfiddle:https://jsfiddle.net/hf4zqnwu/3/

0

我不會寫代碼的你,因爲我得到感覺這是一個學校作業,但爲什麼不嘗試下面的地方,其中x =今天之前的天數:

  1. 獲取當前的索引 天。
  2. 雖然x < 7,x = x - 7.
  3. 如果天前=== 0,返回當天。
  4. 如果當天的指數> x當天返回的日期 - x。
  5. 否則,在指數當天返回天+(7 - x)的
0

只需使用模運算:

(indexOf_currentday - 天)%7 = indexOf_searchedDay

在您的例子週一有索引1 (1 - 5)%7 = -4%7 = 4%7 = 4

+0

這是錯的,-4%7 =(-4 + 7)%7 = 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; 
} 
0

我能想到的兩種方式。這看起來很像一門功課,所以我不打算拼出來給你,道歉,如果它不是:P

模數

JavaScript有一個模塊化運算符(%)認爲是有用的東西喜歡這個。

15 % 7 = 1 
21 % 7 = 0 
5 % 7 = 5 

您可以使用它來「循環」到正確的值。請記住,返回7天與返回21相同。

重要的是要注意的是,如果結果爲負數,模塊化算術不適用於您,因此爲了避免您可能需要的問題先將您減去的數字加7。

如果你這樣做,你應該能夠處理任何持續時間(即使返回的持續時間是123443434124123天)。這樣做不對,你可能會得到任意時間錯誤超過7 :)

與反

循環使用for循環或while循環,算上回來,你需要回去的持續時間(所以如果你想返回5天,從5到0)。從開始日開始,每次從您的索引中減去1。當您的索引退出數組中的有效索引範圍時,循環回最終值。即每次你到達0時,回到7.你最後得到的數字應該是你的目標指數。