Проблемы зацикливания объектов - PullRequest
0 голосов
/ 02 мая 2018

У меня есть объекты, созданные из таблицы HTML, каждый объект - это строка в указанной таблице. Они выглядят так:

function rowObj(aName,suctionTemp,liquidTemp,outsideTemp,boxTemp,foodTemp1,foodTemp2,foodTemp3,foodTemp4,suctionPsi,liquidPsi,
            compressorAmps,condensorFan,evaporatorFan,mainPower,doorSwitch,input2,input3,input4,hour,minute,amPm){
this.aName=aName,
    this.suctionTemp=suctionTemp,
    this.liquidTemp=liquidTemp,
    this.outsideTemp=outsideTemp,
    this.boxTemp=boxTemp,
    this.foodTemp1=foodTemp1,
    this.foodTemp2=foodTemp2,
    this.foodTemp3=foodTemp3,
    this.foodTemp4=foodTemp4,
    this.suctionPsi=suctionPsi,
    this.liquidPsi=liquidPsi,
    this.compressorAmps=compressorAmps,
    this.condensorFan=condensorFan,
    this.evaporatorFan=evaporatorFan,
    this.mainPower=mainPower,
    this.doorSwitch=doorSwitch,
    this.input2=input2,
    this.input3=input3,
    this.input4=input4,
    this.hour=hour,
    this.minute=minute,
    this.amPm=amPm;

};

То, что я пытаюсь сделать, это циклически проходить через эти объекты и получать время, когда блок включен. Я могу сделать это:

var minuteArray=[];
for ( var key in objects){
    if (objects[key].compressorAmps > 0 && objects[key].condensorFan > 0){
        minuteArray.push(objects[key].minute);
    }else{
        key++;
        break;
    }
}
var firstMinute= minuteArray.shift();
var lastMinute=minuteArray.pop();

var hourArray=[];
for ( var key in objects){
    if (objects[key].compressorAmps > 0 && objects[key].condensorFan > 0){
        hourArray.push(objects[key].hour);
    }else{
        key++;
        break;
    }
}
var firstHour= hourArray.shift();
var lastHour=hourArray.pop();

Здесь я помещаю все значения в массив, а затем беру первый и последний элемент и получаю из них часы и минуты. Это позволяет мне рассчитать, как долго он работает. Это также только дает мне текущее время выполнения. В конечном итоге я хочу: 1. Храните каждый набор бегущих значений в массиве 2. Тогда значения, когда он равен 0 в массиве 3. Затем продолжайте и сохраните следующий набор, где он> 0, в другом массиве

    for ( key in objects){
    if ( objects[key].compressorAmps > 0 && objects[key].condensorFan > 0){
        //store values in an array until compressorAmps === 0, skip those
        //then store the next set, where compressorAmps >0 in a different array
    }else if (objects[key].compressorAmps === 0 && objects[key].condensorFan === 0){

    }
}

Я не знал, возможно ли это, и если это так, мне очень трудно понять это. Любая помощь будет принята с благодарностью. Спасибо

1 Ответ

0 голосов
/ 02 мая 2018

Поместите значения в массив, отсортированный по времени (я полагаю, это то, что вы хотите). Затем все, что вам нужно сделать, это перебрать ваш массив, протестировать каждое значение и найти условие ребра. Так что-то вроде:

var result = [];    // this will be a 2D array with your results
var curr = null;    // this is the current run
for (var i=0; i < data.length; i++) {
     if (data[i].compressorAmps > 0) {   // test condition, change as needed
         if (!curr) {                    // if we don't have a run, start one
             curr = [];
         }
         curr.push(data[i]);             // store the current value
     } else {
        if (curr) {                      // if this is the end of a run
            result.push(curr);           // save the run
            curr = null;
        }
     }
}

Теперь вы можете перебирать result и брать первый и последний из каждого прогона, чтобы вычислить время:

for (var i=0; i < result.length; i++) {
    var start = result[i][0];
    var end = result[i][result[i].length - 1];
    console.log("Run started at: " + start.hour + ":" start.minute);
    console.log("Run ended at: " + end.hour + ":" end.minute);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...