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.LiveSnapshotIDtrue に対してチェックされることです。ここで確認できます ( LiveSnapshotIDboolean に変更されました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 に答える