检查多个变量以进行值更改

时间:2014-07-16 16:09:30

标签: javascript

我有6个变量(让我们称之为var1,var2,...)。它们都有预定义的初始值。在我的程序过程中,它们的值可能会被重新定义。 (我可以选择覆盖值或将新值存储在单独的变量中)在特定函数的末尾,只有当任何值从其初始值发生更改时,我才需要执行某些操作。

我试图避免为该任务写一个长if语句,如:

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

任何想法优雅地做到这一点?

2 个答案:

答案 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会告诉您 是否已更改