2014-07-16 8 views
0

6 개의 변수가 있습니다 (var1, var2 ...). 그것들은 모두 미리 정의 된 초기 값을 가지고 있습니다. 내 프로그램 과정에서 그 가치가 다시 정의 될 수 있습니다. (값을 덮어 쓰거나 새로운 값을 별도의 변수에 저장하는 옵션이 있습니다.) 특정 함수가 끝나면 초기 값에서 값이 변경된 경우에만 작업을 수행해야합니다. 우아하게이 작업을 수행하는값 변경을위한 여러 변수 확인

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

어떤 아이디어 :

내가 좋아하는 그 작업을 위해 if 문이 오래를 작성 피하기 위해 노력하고 있어요?

+0

codereview.stackexchange.com –

+1

숫자 또는 문자열입니까? –

+0

@VivinPaliath 이들은 모두 정수입니다. – user3845866

답변

0

스토어 그것을 통해 객체 및 루프의 값 : 그래서 (

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

당신은 vars.updated에 업데이트 된 값을 작성 끝장 :

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

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

당신은지도 내부에 저장할 수 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

@ 짐, 나는 따라 가지 않는다. 불평등을 감지하자마자 '변경됨'은 '참'이됩니다. 즉, 즉시 루프가 해제됩니다. –

+0

죄송 합니다만, 나는 그 사실을 알지 못했습니다! 그래서 내 코멘트를 삭제했습니다 ;-). – Jim

+0

@ 짐, 아 좋아! :) –