3

わかりました、これは私が得たものです:

var matchgrid = {
    "a1":[false, 0], "a2":[false, 0], "a3":[false, 0],
    "b1":[false, 0], "b2":[false, 0], "b3":[false, 0],
    "c1":[false, 0], "c2":[false, 0], "c3":[false, 0]};

var keys = Object.keys(matchgrid);

var ch = 0;

for (i=0;i<9;i++) {
        if (matchgrid[keys[i]][0] === false) {
            ch += 1;
        } else if (matchgrid[keys[i]][0] === true) {
            ch -= 1;
        }
    }

//then check it with:

if (ch === 9) {
    //do something
} else { 
    //do something else
}

ご覧のとおり、配列を値として持つ辞書であり、すべてのキーの最初の値がfalsetrueまたは混合されているかどうかを知りたいのですが、これはうまく機能しますが、もっと良い方法があると確信しています。ヘルプ?

4

2 に答える 2

3

あなたのネイティブ JavaScript アプローチは問題ありません。合計を保存するのではなく、ブール値を保存して true として開始し、false が表示された場合は false に設定します。次に、チェックするのではなくch == 9、ブール値をチェックします。

ただし、underscore.js (リスト用の便利な関数がたくさんある) を使用できる場合は、それらの関数の 1 つが呼び出されevery、すべての項目が真偽テストに合格するかどうかがチェックされます。次に、これと同じくらい簡単になります

_.every(matchgrid, function(item) {
     return item[0];
})

さらに短く、少し手の込んだ:

_.every(matchgrid, _.first); // will return true if all elements are true
于 2013-03-28T18:09:27.130 に答える
1
var ch = 0;

var result;
for (i=0;i<9;i++) {
        result = matchgrid[keys[i]][0];
        if (result) {
            break;
        } 
    }

// result will be false if they are all false
于 2013-03-28T18:07:22.200 に答える