我習慣了 php 語法,似乎無法理解為什么我不能用這么簡單的東西來解決我的問題……所以就這樣吧。(可能我忽略了一些非常愚蠢的東西,但此時它就像紅布上的公牛)
我的代碼:
n_machines = global.get("n_machines");
endtime = [];
running = [];
time_left = [];
types = ["delayed_output_timer","startup_timer"];
timer = {};
for(i = 0 ; i < types.length ; i ){
key = types[i];
//loop through parameters of timer and set default values
for(m_num = 0; m_num < n_machines; m_num )
{
endtime[m_num] = 0;
running[m_num] = false;
time_left[m_num] = 0;
}
timer[key] = { endtime: endtime, running : running, time_left : time_left };
}
timer.delayed_output_timer.running[0] = "TESTING";
test = timer['delayed_output_timer'].running[0];
msg = {payload:[timer,test],topic:"timer"};
return msg;
當我輸出此代碼時,這將回傳一個物件,該物件不僅已timer.delayed_output_timer.running[0]更改,而且物件已timer.startup_timer.running[0]更改???
我在這里做錯了什么?我不想將其更改為陣列。我想了解為什么以及如何更改這些物件陣列中的 1 個......而不是兩者?
另請注意,當我更改它時,我在回圈之外,當我嘗試更改時,我遇到了同樣的問題,timer["delayed_output_timer"].running[0] = "TESTING"
這是輸出。(它在節點紅色控制臺中,但這不重要)
uj5u.com熱心網友回復:
您可能應該將變數endtime、running和移動time_left到回圈的范圍內。否則,如果您將它們保持在全域范圍內,則每個計時器都會使用在頂部宣告的單個全域物件。
n_machines = global.get("n_machines");
types = ["delayed_output_timer","startup_timer"];
timer = {};
for(i = 0 ; i < types.length ; i ){
endtime = []; /// moved here
running = [];
time_left = [];
key = types[i];
...
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/495642.html
標籤:javascript
