avk*_*kov 23 javascript arrays jquery javascript-objects
JS对象:
var saver = {
title: false,
preview: false,
body: false,
bottom: false,
locale: false
};
Run Code Online (Sandbox Code Playgroud)
问题是如何检查所有值是否为假?
我可以使用$ .each()jQuery函数和一些标志变量,但是可能有更好的解决方案?
Mat*_*ane 23
这是一个非常简单的解决方案,需要JavaScript 1.8.5.
Object.keys(obj).every((k) => !obj[k])
Run Code Online (Sandbox Code Playgroud)
例子:
obj = {'a': true, 'b': true}
Object.keys(obj).every((k) => !obj[k]) // returns false
obj = {'a': false, 'b': true}
Object.keys(obj).every((k) => !obj[k]) // returns false
obj = {'a': false, 'b': false}
Object.keys(obj).every((k) => !obj[k]) // returns true
Run Code Online (Sandbox Code Playgroud)
或者你可以写
Object.keys(obj).every((k) => obj[k] == false)
Object.keys(obj).every((k) => obj[k] === false) // or this
Object.keys(obj).every((k) => obj[k]) // or this to return true if all values are true
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅Mozilla Developer Network Object.keys()的参考.
Arc*_*her 19
这样就可以了!
var result = true;
for (var i in saver) {
if (saver[i] === true) {
result = false;
break;
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用循环来迭代对象,可以是索引或键(如上所述).
如果你是在整洁的代码之后,而不是重复它,那么只需将它放在一个函数中......
Object.prototype.allFalse = function() {
for (var i in this) {
if (this[i] === true) return false;
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
然后你可以随时打电话给它,就像这样......
alert(saver.allFalse());
Run Code Online (Sandbox Code Playgroud)
这是一份工作样本......
Object.prototype.allFalse = function() {
for (var i in this) {
if (this[i] === true) return false;
}
return true;
}
var saver = {
title: false,
preview: false,
body: false,
bottom: false,
locale: false
};
console.log("all are false - should alert 'true'");
console.log(saver.allFalse());
saver.body = true;
console.log("one is now true - should alert 'false'");
console.log(saver.allFalse());
Run Code Online (Sandbox Code Playgroud)
and*_*rsh 17
在评论中,您询问是否可以避免迭代.你可以,如果你使用JavaScript库支持的功能的方法,如下划线,Lodash或糖.
使用Underscore和Lodash,您可以编写如下内容:
var result = _.every(_.values(saver), function(v) {return !v;});
Run Code Online (Sandbox Code Playgroud)
使用Sugar,您可以简单地写:
var result = Object.all(saver,false);
Run Code Online (Sandbox Code Playgroud)
它更干净,更容易理解!而且它可以节省我们的运行时间,因为一旦函数条件存在一次,它就会跳出循环并返回true。
Object.values(obj).some(val => val)
Run Code Online (Sandbox Code Playgroud)
如果你真的需要严格相等来错误写这个:
Object.values(obj).some(val => val !== false)
Run Code Online (Sandbox Code Playgroud)
Object.values(obj)
用每个键的值创建一个数组。
归档时间: |
|
查看次数: |
32900 次 |
最近记录: |