2011-11-08 1 views
0

site_with_same_coords 및/또는 site_with_same_name 멤버를 포함 할 수도 있고 포함하지 않을 수도있는 data 개체가 있습니다. 나는이 테스트 하나 또는 모두에 해당되면, 나는 사용자에게 경고 :두 조건 중 하나 또는 둘 모두가 맞는지 테스트 할 중첩 된 ifs

if (data.site_with_same_coords){ 
    var SameCoordsExists = true; 
    same_coords_message = 'The site '; 
    same_coords_message += data.site_with_same_coords.name; 
    same_coords_message += 'already already exists in the location you have indicated'; 
} 

if (data.site_with_same_name){ 
    var SameNameExists = true; 
    same_name_message = 'The site '; 
    same_name_message += data.site_with_same_name.name; 
    same_name_message += 'already already exists in a differnt location from the one you have indicated'; 
} 

if (SameCoordsExists && SameNameExists){ 
    if(data.site_with_same_name.id != data.site_with_same_coords.id){ 
     alert(same_coords_message + '\n' + same_name_message); 
    }else if (SameCoordsExists){ 
     alert(same_coords_message); 
    } 
    }else if (SameNameExists){ 
     alert(same_name_message); 
    } 
} 

이 일을 더 나은 방법이 있나요?

답변

1

물론, 당신은 배열에 넣어 그들에 가입 할 수 :

사이트의 some_site : 그들은 메시지를받은 경우

또한
var messages = []; 

if(data.site_with_same_coords) { 
    messages.push('The site ' + data.site_with_same_coords.name + ' already exists in the location you have indicated'); 
} 

if(data.site_with_same_name && !(data.site_with_same_coords && data.site_with_same_name.id === data.site_with_same_coords.id)) { 
    messages.push('The site ' + data.site_with_same_name.name + ' already exists in a different location from the one you have indicated'); 
} 

alert(messages.join('\n')); 

가 아닌 사용자가 약간의 혼동이 될 것입니다 이미 지정한 위치에 있습니다.
사이트 some_other_site는 (는) 표시된 위치와 다른 위치에 있습니다.

? 그냥 생각.

+0

이 도움이 될 것입니다,하지만 난 단지 다른 조건에 해당하는 경우 모두 메시지를 표시 할'data.site_with_same_name.id를 ! = data.site_with_same_coords.id'. 이 솔루션에 통합 될 수 있습니까? – Keyslinger

+0

@Keyslinger : 나는 그것을 포함하도록 답을 편집했습니다. – Ryan

+0

이제는 'site_with_same_coords' 메시지 또는 두 메시지 만 출력 할뿐 아니라'site_with_same_name' 메시지 만 출력하는 것처럼 보입니다. – Keyslinger

0

이 골격 :

if (A && B) { 
    if (C) 
    print(msgA); 
    print(msgB); 
} else { 
    print(msgA); 
} 

과 같이 다시 작성할 수 있습니다 :

var AB = A && B; 
if ((AB && C) || !AB) 
    print(msgA); 
if (AB) 
    print(msgB); 

당신이 볼 수있는 당신이 비행 오른쪽 위치에 문자열을 만들 수 있도록, msgAmsgB는 한 번만 표시 그들은 인쇄됩니다. 분명히 귀하의 경우 Adata.site_with_same_coords이고 Bdata.site_with_same_name이고 C는 data.site_with_same_name.id != data.site_with_same_coords.id입니다.

재 작성된 버전이 읽기 쉽지 않다는 것은 말할 필요도 없습니다.

갱신 : 당신이 정말로) (경고해야 할 경우 당신은 할 줄 :

var AB = A && B; 
if ((AB && C) || !AB) 
    msg += msgA; 
if (AB) 
    msg += msgB; 
if (msg) 
    alert(msg);