好的,这就是我得到的:
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
}
正如你所看到的,它是一个以数组作为值的字典,我想知道所有键的第一个值是false
,true
还是混合,这个工作正常,但我我确定有更好的方法可以做到,有什么帮助吗?
答案 0 :(得分:3)
您的原生JavaScript方法很好。您可以只存储一个布尔值,而不是存储总和,将其设置为true,然后如果您看到false,则将其设置为false。然后检查ch == 9
而不是检查布尔值。
但是,如果你可以使用underscore.js(列表中有许多有用的函数),其中一个函数叫做every
,它检查每个项目是否通过了真值测试。然后就变得这么简单了
_.every(matchgrid, function(item) {
return item[0];
})
更短,更有点发烧友:
_.every(matchgrid, _.first); // will return true if all elements are true
答案 1 :(得分: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