1

如何有效地检查多个变量的值是否全部匹配?如果它们匹配,则以下函数应返回 true,否则返回 false:

function projectIsLocked (data) {
    if (data.ArchiveSnapshotID === data.CurrentSnapshotID === data.LiveSnapshotID) {
        return true;
    }
    return false;
}

我以为我可以使用if (data.ArchiveSnapshotID === data.CurrentSnapshotID === data.LiveSnapshotID),但它似乎不起作用。

一些简单的想法?

4

3 回答 3

1

为什么不将它们全部推送到一个数组中。这样你可以使用尽可能多的。

function check_for_equal_array_elements(my_array){
  if (my_array.length == 1 || my_array.length == 0) {
     return true;
  }
  for (i=0;i<my_array.length;i++){
     if (i > 0 && my_array[i] !== my_array[i-1]) {
       return false;
     }
  }
  return true;
}

//Example:
var my_array = [];
my_array.push(5);
my_array.push(5);

// will alert "true"
alert("all elements equal? "+check_for_equal_array_elements(my_array));

my_array.push(6);
// will alert "false"
alert("all elements equal? "+check_for_equal_array_elements(my_array));
于 2012-11-28T20:46:12.323 回答
1

如果只有 3 个比较,那么这应该足够了。

function projectIsLocked (data) {
    var archive = data.ArchiveSnapshotID;
    var current = data.CurrentSnapshotID;
    var live = data.LiveSnapshotID;

    return (archive === current && current === live)
}
于 2012-11-28T20:50:32.217 回答
0

这里的问题是,逻辑表达式的一部分被评估然后比较,因此 data.ArchiveSnapshotID === data.CurrentSnapshotID评估为“true”并data.LiveSnapshotID检查是否为 true,您可以在此处看到(LiveSnapshotID已更改为 boolean true):

function projectIsLocked (data) {
    if (data.ArchiveSnapshotID === data.CurrentSnapshotID === data.LiveSnapshotID) {
        return true;
    }
    return false;
}

var data = { ArchiveSnapshotID: "foo", CurrentSnapshotID: "foo", LiveSnapshotID: true };
alert(projectIsLocked (data));

您可能想要使用类似这样的东西,它对于更多的属性是相当可扩展的。

function projectIsLocked (data) {
    var props = ["ArchiveSnapshotID", "CurrentSnapshotID", "LiveSnapshotID"];

    for (var i = 1; i < props.length; i++) 
    {
        if (data[props[i]] !== data[props[i - 1]])
            return false;
    }
    return true;
}
于 2012-11-28T20:50:56.207 回答