Javascript 通过对象循环的问题

Javascript 通过对象循环的问题,javascript,loops,object,Javascript,Loops,Object,我有从HTML表创建的对象,每个对象都是所述表中的一行。它们看起来像这样: function rowObj(aName,suctionTemp,liquidTemp,outsideTemp,boxTemp,foodTemp1,foodTemp2,foodTemp3,foodTemp4,suctionPsi,liquidPsi, compressorAmps,condensorFan,evaporatorFan,mainPower,doorSwitch,input2,inp

我有从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){

    }
}

我不知道这是否可能,如果可能,我很难弄清楚。任何帮助都将不胜感激。谢谢

将值放入按时间排序的数组中,我想这就是您想要的。然后,您所需要做的就是遍历数组,测试每个值并查找边缘条件。比如:

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;
        }
     }
}

那么rowObj创建的对象存储在哪里?在阵列中?它们是否按时间顺序存储?不,存储在变量对象中。看起来是这样的:为了进一步分解您的问题,您基本上希望将compressorAmps==0或compressAmps>0的值的运行存储到一组array?对象中{0:rowObj,1:rowObj,2:rowObj,3:rowObj,4:rowObj,5:rowObj,6:rowObj,7:rowObj,8:rowObj,9:rowObj,10:rowObj,11:rowObj,12:rowObj,13:rowObj,14:rowObj,15:rowObj,16:rowObj,17:rowObj,18:rowObj,19:rowObj}作为一般性的评论,当你有一个函数需要这么多参数时,你可能应该考虑重构它。在你所在的一些地方,大概是从表中选择了一行。可能该函数应该在那里创建对象。太棒了!这似乎正是我想要的。我不得不稍微调整一下,但它让我如愿以偿正确的道路。我想我现在可以走到我要去的地方了。非常感谢。
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);
}