2014-07-16 79 views
0

我有6個變量(讓我們稱之爲var1,var2,...)。他們都有預定義的初始值。在我的計劃過程中,他們的價值觀可能會被重新定義。 (我可以選擇覆蓋值或將新值存儲在單獨的變量中)。在特定函數結束時,只有當任何值從其初始值更改時,我才需要執行某些操作。檢查多個變量的值變化

我試圖避免寫長的if語句對於這樣的任務:

if ((var1 != var1new) || (var2 != var2new)......) 
{ 
    //do something... 
} 

任何想法,以優雅的做到這一點?

+0

codereview.stackexchange.com –

+1

他們是數字還是字符串? –

+0

@VivinPaliath它們都是整數。 – user3845866

回答

0

存儲通過它的對象和循環值:

var values = { var1: { current: 0, initital: 0 }, var2: { current: 0, initial : 0 } }; 

for(var v in values) 
{ 
    if(v.current !== v.initial) 
    { 
     //Changed 
    } 
} 
0

你可以將它們存儲的地圖內:

var vars = { 
    original: { 
     var1: ..., 
     var2: ..., 
     ... 
    }, 
    updated: { 
     var1: ..., 
     var2: ..., 
     ... 
    } 
}; 

你最終寫入更新值vars.updated(所以例如vars.updated.var1)。

之後,您可以簡單地循環檢測是否有任何變化。

var changed = false; 
var keys = Object.keys(vars.original); 
var i = 0; 

while(!changed && i < keys.length) { 
    var key = keys[i]; 
    changed = (vars.original[key] !== vars.updated[key]); 
    i++; 
} 

你也可以做到這一點在使用reduce一個功能更強大的方式:

var similar = Object.keys(vars.original).reduce(function(similar, key) { 
    return similar && (vars.original[key] === vars.updated[key]); 
}, true); 

它比循環更優雅。請注意,這告訴你如果對象還沒有更改(上述while告訴你他們是否已更改)。

+0

@Jim,我不關注。只要它檢測到不等式,「changed」就變成「true」,這意味着循環將立即釋放。 –

+0

對不起,我沒有注意到在WHILE中改變!這就是爲什麼我刪除了我的評論;-)。 – Jim

+0

@Jim,好的! :) –