2014-07-16 82 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,好的! :) –