Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

413
Vistas
Problemas al pasar una matriz 2D en NodeRed

Estoy usando node-red (JS) para tomar datos de un sensor que transmite a través de MQTT. Los datos del sensor se analizan como una matriz de 4 valores [a, b, c, d] relacionados con 4 mediciones diferentes.

Estos datos se almacenan en una matriz global denominada dataArray, que es una matriz bidimensional.

 dataArray[0] = [a, b, c, d];

de modo que

 dataArray[i][0] = Temperature dataArray[i][1] = VibrationX dataArray[i][2] = VibrationY dataArray[i][3] = VibrationZ

La forma estándar en que accedería al contenido de esta matriz sería

 dataArray[i][j]

Sin embargo, aparece el error "No se puede acceder a la propiedad de indefinido" cuando intento leer la matriz para calcular los promedios.

Ok, entonces eliminé la segunda dimensión e intenté acceder a dataArray[0] - Esto devolvió 'array[0]' una matriz vacía.

Luego intenté devolver el dataArray tal como se pasó a la función: es decir

 function average(data) { return data; } average(dataArray);

esto también devolvió array[0].

Finalmente especifiqué manualmente la matriz dentro de la función.

 dataArray = [[a, b, c, d], [a1, b1, c1, d1]];

y esto devolvió el resultado esperado.

Creo que tiene algo que ver con la forma en que la matriz se pasa a la definición, o la forma en que el objeto se almacena en global antes del acceso, pero ninguna búsqueda en Google me ha ayudado a resolver esto.

código:

 function Average(data) { var temperatureValue = 0; var vibXValue = 0; var vibYValue = 0; var vibZValue = 0; for (var i = 0, n = data.length; i < n; i++) { temperatureValue = data[i][0] + temperatureValue; vibXValue = data[i][1] + vibXValue; vibYValue = data[i][2] + vibYValue; vibZValue = data[i][3] + vibZValue; } //Average values from each array element var msg1 = []; //msg1 = [temperatureValue / n, vibXValue / n, vibYValue / n, vibZValue / n] //DEBUG - Send dataArray straight through, and it's length msg1 = [data, data.length]; return msg1; } var dataArray = global.get("dataArray")||[]; var sensorData = msg.payload; //This is the input from the Cron node. As long as the input to the function isn't "ClearArray" then push new MQTT messages to the dataArray. if (msg.payload != "ClearArray") { dataArray.push(sensorData); } else if (dataArray.length != 0) { msg1 = Average(dataArray); msg2 = Peak(dataArray); msg.payload = [msg1, msg2]; //global.set("dataArray",[]); return msg; }
about 4 years ago · Juan Pablo Isaza
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda