Home > Mobile >  how to push an array inside an array with nested nested loop
how to push an array inside an array with nested nested loop

Time:06-16

With the following code, I want to push an array inside the weeks array if i is <= to the value of each element in that array.

const weeks = [];
const daysInWeek = [];
numberOfDays = 35;

for (let i = 1; i <= numberOfDays; i   ) {
  if (i % 7 === 0){
    weeks.push(i)
  }
  // output [7, 14, 21, 28, 35]
  for (logic here...) {
    daysInWeek.push([?])
  }
}

I would like daysInWeek to look something like this :

[[1, 2, 3, 4, 5, 6, 7], [8, 9, 10, 11, 12, 13, 14], [15,......], ...]

It is the first time I work with nested loops and I can't really grasp the idea and therefor I am unsure how to use the second loop.

Any help would be greatly appreciated.

CodePudding user response:

Create a new array inside of the if (i % 7 === 0){ statement. That array is going to be created for every week and is going to hold your days.

Now start the second loop by subtracting 6 from the current value of i. i will always be a multitude of 7. So by subtracting 6 you get the first day in that week. Store that result in j.

Then for the evaluation part of the loop, check if j is equal or lower than i, we never want to go higher than the last day in the current week. Also check if j is equal or lower than numberOfDays. You don't want to add more days than you indicated.

Add each day to the days array. Then after the loop add the days array to daysInWeek. Now you got this nested array structure.

const weeks = [];
const daysInWeek = [];
numberOfDays = 35;

for (let i = 1; i <= numberOfDays; i   ) {
  if (i % 7 === 0){
    weeks.push(i)
    
    const days = [];
    
    for (let j = i - 6; j <= i && j <= numberOfDays; j  ) {
      days.push(j);
    }
    
    daysInWeek.push(days);
  }  
}

console.log(daysInWeek);

CodePudding user response:

Your loop is wrong. Please try this also.

Within a single loop we can create both all arrays and add them together like this.

const weeks = [];
    const daysInWeek = [];
    numberOfDays = 35;
    
    for (let i = 1; i <= numberOfDays; i   ) {
      const weekid = parseInt(((i-1)/7));  // used i-1 because in the loop i started as 1. if we use i/7 we loose a day record from the first week. Test it.
      if(!weeks.includes(weekid) ){
        weeks.push(weekid);
      }
      let tempArray = [];
    
      if(daysInWeek[weekid] === undefined){
        daysInWeek[weekid] = [];
      }
      daysInWeek[weekid].push(i);
    
    }
    console.log(daysInWeek);

CodePudding user response:

Math.floor((i - 1) / 7) give you the key of the table to push your days

<script type="text/javascript">
const weeks = [];
const daysInWeek = [[]];
numberOfDays = 35;

for (let i = 1; i <= numberOfDays; i   ) {
  if (i % 7 === 0){
    weeks.push(i)
    daysInWeek.push([])
  }
  daysInWeek[Math.floor((i - 1) / 7)].push(i)
}

console.log(daysInWeek);
</script>
  • Related