0

我有一个对象,data可能包含也可能不包含成员site_with_same_coords和/或site_with_same_name。我对这些进行测试,如果其中一个或两者都存在,我会向用户发出警报:

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);
    }
}

有没有更好的方法来做到这一点?

4

2 回答 2

1

当然,您可以将它们放在一个数组中并加入它们:

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_site 已存在于您指定的位置 站点 some_other_site 已存在于与您指定
的位置不同的位置

? 只是一个想法。

于 2011-11-08T03:31:08.390 回答
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);

如您所见,msgA并且msgB只出现一次,因此您可以在打印字符串的位置即时创建字符串。显然,在你的情况下,A会是data.site_with_same_coordsB会是data.site_with_same_name,C 会是data.site_with_same_name.id != data.site_with_same_coords.id

不言而喻,重写版本的可读性要低得多。

更新:如果你真的需要 alert() 那么你会这样做:

var AB = A && B;
if ((AB && C) || !AB)
  msg += msgA;
if (AB)
  msg += msgB;
if (msg)
  alert(msg);
于 2012-04-30T11:18:42.217 回答