Checking multiple variables with the same "rules"

I need to build an array of objects. I can do this a long hand, but I hope to find a way to iterate through some variables and test each one to “push” them to the right place in the array.

I have it:

//this is the starting array...I'm going to update these objects
    operationTime = [ 
{"isActive":false,"timeFrom":null,"timeTill":null},//Monday which is operationTime[0]
{"isActive":false,"timeFrom":null,"timeTill":null},
{"isActive":false,"timeFrom":null,"timeTill":null},
{"isActive":false,"timeFrom":null,"timeTill":null},
{"isActive":false,"timeFrom":null,"timeTill":null},
{"isActive":false,"timeFrom":null,"timeTill":null},
{"isActive":false,"timeFrom":null,"timeTill":null}
];

//I get the below via an API call
var monHours = placeHours.mon_open_close;
var tueHours = placeHours.tue_open_close;
var wedHours = placeHours.wed_open_close;
var thuHours = placeHours.thu_open_close;
var friHours = placeHours.fri_open_close;
var satHours = placeHours.sat_open_close;
var sunHours = placeHours.sun_open_close;
var sunHours = placeHours.sun_open_close;


//here where I'm stuck. 
if (monHours.length>0){ 
   var arr = monHours[0].split("-");
    operationTime[0].isActive= true;
    operationTime[0].timeFrom= arr[0];
    operationTime[0].timeTill= arr[1];  
}
else {
    operationTime[0].isActive= false;
}

      

My if/else

works fine in the above example from Monday, but I don't want to write this for seven days of the week, making it unnecessarily complicated. How can I condense this into a single "function" that will check each variable and insert it into the array object at the correct position?

+3


source to share


3 answers


You can try this way: foreach

all day,



$all_hours = [monHours, tueHours , wedHours , thuHours , friHours , satHours ,sunHours];

foreach($all_hours as $k=>$hours){
   if ($hours.length>0){ 
    $arr = $hours[k].split("-");
    operationTime[$k].isActive= true;
    operationTime[$k].timeFrom= $arr[0];
    operationTime[$k].timeTill= $arr[1];  
   }
else {
    operationTime[$k].isActive = false; 
  }
}

      

+3


source


I think you can put the keys into an array and then loop forEach

through operationTime and update the object based on the index:



operationTime = [ 
  {"isActive":false,"timeFrom":null,"timeTill":null},
  {"isActive":false,"timeFrom":null,"timeTill":null},
  {"isActive":false,"timeFrom":null,"timeTill":null},
  {"isActive":false,"timeFrom":null,"timeTill":null},
  {"isActive":false,"timeFrom":null,"timeTill":null},
  {"isActive":false,"timeFrom":null,"timeTill":null},
  {"isActive":false,"timeFrom":null,"timeTill":null}
];

// make an array of keys that has the same order of the operationTime
var keys = ['mon_open_close', 'tue_open_close', 'wed_open_close', 'thu_open_close', 'fri_open_close', 'sat_open_close', 'sun_open_close'];  

var placeHours = {'mon_open_close': ['08:00-17:00'], 'tue_open_close':[], 'wed_open_close':[], 'thu_open_close':[], 'fri_open_close':[], 'sat_open_close':[], 'sun_open_close':['10:20-15:30']}

operationTime.forEach( (obj, index) => {
  var dayHours = placeHours[keys[index]];
  if(dayHours.length > 0) {
    var arr = dayHours[0].split("-");
    obj.isActive= true;
    obj.timeFrom= arr[0];
    obj.timeTill= arr[1]; 
  }
})

console.log(operationTime);
      

Run code


+4


source


You can use Object.entries()

to iterate over the properties and values ​​of an object as an array, .map()

to define and include an iteration index in a block for..of

or other loop. The index is used to reference the index

array objectoperationTime

for (let 
       [key, prop, index] 
     of 
       Object.entries(placeHours)
       .map(([key, prop], index) => [key, prop, index]))) {
         if (prop.length > 0 ) { 
           let [arr] = prop.split("-");
           operationTime[index].isActive = true;
           operationTime[index].timeFrom = arr[0];
           operationTime[index].timeTill = arr[1];  
         }
}

      

0


source







All Articles