我有6个变量(让我们称之为var1,var2,...)。它们都有预定义的初始值。在我的程序过程中,它们的值可能会被重新定义。 (我可以选择覆盖值或将新值存储在单独的变量中)在特定函数的末尾,只有当任何值从其初始值发生更改时,我才需要执行某些操作。
我试图避免为该任务写一个长if语句,如:
if ((var1 != var1new) || (var2 != var2new)......)
{
//do something...
}
任何想法优雅地做到这一点?
答案 0 :(得分:0)
将值存储在对象中并循环遍历:
var values = { var1: { current: 0, initital: 0 }, var2: { current: 0, initial : 0 } };
for(var v in values)
{
if(v.current !== v.initial)
{
//Changed
}
}
答案 1 :(得分: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
会告诉您 是否已更改