Nested loops with conditions in javascript

I am working on a project where I want to create an array with a name full_day[]in order to have exactly equal length with the array time_plan[]after going through mine day_schedule().

Here is my code:

function day_schedule(){

var time_plan = [{"lesson_start":"08:00","lesson_end":"09:00"},{"lesson_start":"09:00","lesson_end":"10:00"},{"lesson_start":"10:00","lesson_end":"11:00"},{"lesson_start":"11:00","lesson_end":"12:00"},{"lesson_start":"12:00","lesson_end":"13:00"},{"lesson_start":"13:00","lesson_end":"13:30"},{"lesson_start":"13:30","lesson_end":"14:30"}];

var day = [{"subject_name":"Math-1","lesson_start":"08:00","lesson_end":"09:00"},{"subject_name":"Phy","lesson_start":"11:00","lesson_end":"12:00"},{"subject_name":"Engl","lesson_start":"12:00","lesson_end":"13:00"}];

var key1 = 'lesson_start';
var key2 = 'lesson_end';
var full_day = [];


for (var d = 0; d < day.length; d++) {
                var start_time = day[d].lesson_start;
                var end_time = day[d].lesson_end;

                for (var i = 0; i < time_plan.length; i++) {
                        var search_key = time_plan[i][key1] == start_time && time_plan[i][key2] == end_time;
                        if (search_key == true) {
                            document.writeln('day matched == ' + day[d],'<br>');
                            full_day.push(day[d]);
                        } else {
                            full_day.push({ 
                                lesson_start: ' ',
                                lesson_end: ' ',
                                subject_name: ' '
                            });
                        }

                    }


                console.log('full day',full_day.length, full_day);


            }
}

day_schedule();
Run codeHide result

I expect a result

full day 7 [
  {
    "subject_name": "Math-1",
    "lesson_start": "08:00",
    "lesson_end": "09:00"
  },
  {
    "lesson_start": " ",
    "lesson_end": " ",
    "subject_name": " "
  },
  {
    "lesson_start": " ",
    "lesson_end": " ",
    "subject_name": " "
  },
  {
    "subject_name": "Phy",
    "lesson_start": "11:00",
    "lesson_end": "12:00"
  },
  {
    "subject_name": "Engl",
    "lesson_start": "12:00",
    "lesson_end": "13:00"
  },
  {
    "lesson_start": " ",
    "lesson_end": " ",
    "subject_name": " "
  },
  {
    "lesson_start": " ",
    "lesson_end": " ",
    "subject_name": " "
  }
];

but I can’t figure out how to do this.

+4
source share
3 answers

You have all the iterations wrong if you want the size to full_dayfit time_plan. What you do in your code is an iteration of each element in day(3 elements), and for each of these elements add an object to full_dayfor each element in time_plan(7 elements). So what you get:

  • element day 7 full_day (7 )
  • Secon element day 7 full_day (14 )
  • element day 7 full_day (21 )

, , :

function day_schedule(){
    var time_plan = [{"lesson_start":"08:00","lesson_end":"09:00"},
                     {"lesson_start":"09:00","lesson_end":"10:00"},
                     {"lesson_start":"10:00","lesson_end":"11:00"},
                     {"lesson_start":"11:00","lesson_end":"12:00"},
                     {"lesson_start":"12:00","lesson_end":"13:00"},
                     {"lesson_start":"13:00","lesson_end":"13:30"},
                     {"lesson_start":"13:30","lesson_end":"14:30"}];

    var day =[{
                  "subject_name":"Math1",
                  "lesson_start":"08:00",
                  "lesson_end":"09:00"
              },
              {
                  "subject_name":"Phy",
                  "lesson_start":"11:00",
                  "lesson_end":"12:00"
              },
              {
                  "subject_name":"Engl",
                  "lesson_start":"12:00",
                  "lesson_end":"13:00"
    }];

    var key1 = 'lesson_start';
    var key2 = 'lesson_end';
    var full_day = [];

    for (var tp = 0; tp < time_plan.length; tp++) {
        var start_time = time_plan[tp].lesson_start;
        var end_time = time_plan[tp].lesson_end;
        var lesson = { 
            lesson_start: ' ',
            lesson_end: ' ',
            subject_name: ' '
        };
        for (var i = 0; i < day.length; i++) {
            var search_key = day[i][key1] == start_time && day[i][key2] == end_time;
            if (search_key == true) {
                lesson = day[i]
            }
        }
        full_day.push(lesson)
    }
    console.log('full day',full_day.length, full_day);
}

day_schedule();
Hide result

, . , JavaScript Array, find()

function day_schedule(){
    var time_plan = [{"lesson_start":"08:00","lesson_end":"09:00"},
                     {"lesson_start":"09:00","lesson_end":"10:00"},
                     {"lesson_start":"10:00","lesson_end":"11:00"},
                     {"lesson_start":"11:00","lesson_end":"12:00"},
                     {"lesson_start":"12:00","lesson_end":"13:00"},
                     {"lesson_start":"13:00","lesson_end":"13:30"},
                     {"lesson_start":"13:30","lesson_end":"14:30"}
        ];
    var day =[{
                  "subject_name":"Math1",
                  "lesson_start":"08:00",
                  "lesson_end":"09:00"
              },
              {
                  "subject_name":"Phy",
                  "lesson_start":"11:00",
                  "lesson_end":"12:00"
              },
              {
                  "subject_name":"Engl",
                  "lesson_start":"12:00",
                  "lesson_end":"13:00"
        }];
    var full_day = [];

    // Use foreach instead of regular for when you iterate arrays
    for (tp in time_plan) {
        var plan = time_plan[tp]
        var start_time = plan.lesson_start;
        var end_time = plan.lesson_end;
        // Use this function to find a suitable lesson given start and end times
        var lesson = day.find(function(d) {
            var start_matches = d.lesson_start == start_time;
            var end_matches = d.lesson_end == end_time;
            var matches = start_matches && end_matches;
            return start_matches && end_matches;
        }) || { // ... or assing a default empty value
            lesson_start: ' ',
            lesson_end: ' ',
            subject_name: ' '
        };
        full_day.push(lesson)
    }
    console.log('full day',full_day.length, full_day);
}

day_schedule();
Hide result

, .

+1

.

function parseObj(o){
  Str = "{<br />";
  var i=0;
  while(i<Object.keys(o).length-1){
    Str += "&ensp;&ensp;"+Object.keys(o)[i]+" : "+o[Object.keys(o)[i]]+",<br />";
    i++;
  }
  Str += "&ensp;&ensp;"+Object.keys(o)[i]+" : "+o[Object.keys(o)[i]]+"<br />}";
  return Str;
}

function day_schedule() {

  var time_plan = [{
    "lesson_start": "08:00",
    "lesson_end": "09:00"
  }, {
    "lesson_start": "09:00",
    "lesson_end": "10:00"
  }, {
    "lesson_start": "10:00",
    "lesson_end": "11:00"
  }, {
    "lesson_start": "11:00",
    "lesson_end": "12:00"
  }, {
    "lesson_start": "12:00",
    "lesson_end": "13:00"
  }, {
    "lesson_start": "13:00",
    "lesson_end": "13:30"
  }, {
    "lesson_start": "13:30",
    "lesson_end": "14:30"
  }];

  var day = [{
    "subject_name": "Math-1",
    "lesson_start": "08:00",
    "lesson_end": "09:00"
  }, {
    "subject_name": "Phy",
    "lesson_start": "11:00",
    "lesson_end": "12:00"
  }, {
    "subject_name": "Engl",
    "lesson_start": "12:00",
    "lesson_end": "13:00"
  }];
  empty={"
  var key1 = 'lesson_start';
  var key2 = 'lesson_end';
  var full_day = [];


  for (var d = 0; d < day.length; d++) {
    var start_time = day[d].lesson_start;
    var end_time = day[d].lesson_end;

    for (var i = 0; i < time_plan.length; i++) {
      var search_key = time_plan[i][key1] == start_time && time_plan[i][key2] == end_time;
      if (search_key == true) {
        document.writeln('day matched == ' + parseObj(day[d])+'<br>');
        full_day.push(day[d]);
      } else {
        full_day.push({
          lesson_start: ' ',
          lesson_end: ' ',
          subject_name: ' '
        });
      }

    }


 //   console.log('full day', full_day.length, full_day);


  }
}

day_schedule();
Hide result
0

-, document.write. , , , , . DOM-. document.createElement node.appendChild . , , , . .

- day, time_plan, day array.reduce. , day , , time_plan. array.map time_plan .

These are just simple transformations of an array / object, nothing out of the ordinary.

const time_plan = [{"lesson_start":"08:00","lesson_end":"09:00"},{"lesson_start":"09:00","lesson_end":"10:00"},{"lesson_start":"10:00","lesson_end":"11:00"},{"lesson_start":"11:00","lesson_end":"12:00"},{"lesson_start":"12:00","lesson_end":"13:00"},{"lesson_start":"13:00","lesson_end":"13:30"},{"lesson_start":"13:30","lesson_end":"14:30"}];

const day = [{"subject_name":"Math-1","lesson_start":"08:00","lesson_end":"09:00"},{"subject_name":"Phy","lesson_start":"11:00","lesson_end":"12:00"},{"subject_name":"Engl","lesson_start":"12:00","lesson_end":"13:00"}];

// Convert day into time-day element pairs
// { "08:00-09:00": { "subject_name": "..." }, ... }
const dayMap = day.reduce((c, v) => Object.assign(c, {[`${v.lesson_start}-${v.lesson_end}`] : v }), {});

// Convert time_plan to its corresponding day element using time
// as key.
const full_day = time_plan.map(v => dayMap[`${v.lesson_start}-${v.lesson_end}`]).filter(v => !!v);

console.log(full_day);
Run codeHide result

At the end full_daythere is array.filterto delete entries that do not have a corresponding item day.

0
source

Source: https://habr.com/ru/post/1673503/


All Articles