如何检查所有对象键是否具有错误值

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()的参考.

  • >>>>最好的答案<<<< (3认同)
  • `Object.values(obj).every((value) =&gt; value === false)` 也应该有效。 (3认同)

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)


Ome*_*mer 8

使用 array.some()

它更干净,更容易理解!而且它可以节省我们的运行时间,因为一旦函数条件存在一次,它就会跳出循环并返回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) 用每个键的值创建一个数组。