У меня есть объекты, созданные из таблицы 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){
}
}
Я не знал, возможно ли это, и если это возможно, мне очень трудно это понять. Любая помощь будет принята с благодарностью. Спасибо
Нет, в переменных объектах. Выглядит так:
Чтобы разбить ваш вопрос дальше, вы хотите, в основном, сохранить бежит значений, где compressorAmps == 0 или compressAmps > 0, в набор массивов?
объекты {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. for...in не гарантирует порядок повторения ключей.
Да по сути. У меня будет, скажем, 4 строки, где усилители> 0, затем 3 строки, где усилители == 0, затем 3 строки, где усилители> 0. Я хочу сохранить первые 4 строки и получить разницу во времени между ними. Пропустите 3 строки, затем сохраните следующие 3 строки в другой переменной.
Да, я знаю, это часть большого проекта. Вот почему я поместил полученные значения в массив. Я могу легко заставить его хранить все значения, которые не === 0, в одном массиве, но это не то, что я хочу. Мне нравится использование объектов здесь для других частей проекта.
Как только у меня есть их в массиве, у меня нет возможности проверить значение компрессораAmps (я не думаю). Я проверяю компрессор Amps, затем сохраняю метку времени от него.
Вы можете хранить объекты в массивах. Массивы тоже являются объектами. Но с некоторыми специфическими свойствами и синтаксисом для их обработки.
И в качестве общего комментария, когда у вас есть функция, принимающая такое количество параметров, вам, вероятно, следует подумать о ее рефакторинге. Где-то вы, по-видимому, выбираете строку из таблицы. Вероятно, эта функция должна создать там объект.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Поместите значения в массив, отсортированный по времени (я предполагаю, что вы хотите). Затем все, что вам нужно сделать, это перебрать ваш массив, проверяя каждое значение и ища граничное условие. Так что-то вроде:
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.info("Run started at: " + start.hour + ":" start.minute);
console.info("Run ended at: " + end.hour + ":" end.minute);
}
Потрясающие! Похоже, это сделало в значительной степени то, что я хотел. Пришлось немного подправить, но это привело меня на верный путь. Думаю, теперь я смогу добраться до того, к чему иду. Большое спасибо.
Итак, где хранятся объекты, созданные
rowObj? В массиве? И хранятся ли они во времени?