Javascript Array.every()检查值是否为false
我有这样一个数组:Javascript Array.every()检查值是否为false,javascript,Javascript,我有这样一个数组: myArray = {firstValue: false, secondValue: false, thirdValue: true, forthValue: false}; 我想检查每个值是否都是假的,如果是,请做些什么。 例如: myArray.every(x => x==false) //do something 这是正确的方法吗?或者需要先传递一个函数?。它不是数组,而是对象 如果要检查所有值是否为false,可以通过获取密钥,然后在该数组上使
myArray = {firstValue: false, secondValue: false, thirdValue: true, forthValue: false};
我想检查每个值是否都是假的,如果是,请做些什么。
例如:
myArray.every(x => x==false)
//do something
这是正确的方法吗?或者需要先传递一个函数?。它不是数组,而是对象 如果要检查所有值是否为
false
,可以通过获取密钥,然后在该数组上使用
const obj={firstValue:false,secondValue:false,thirdValue:true,forthValue:false};
const allFalse=Object.keys(obj).every(key=>obj[key]==false);
console.log(allFalse)代码>你没有数组,你有一个对象
可以使用Object.values()创建要迭代的值数组
Object.values(myArray).every(x => x===false)
注意:如果在传统浏览器中使用,则需要polyfill,我会:
!Object.values(myArray /*?*/).reduce((a,b) => a || b);
除了使用之外,您还可以使用并通过使用作为回调来获取它的值
if (!Object.values(myObject).some(Boolean)) {
//...
}
您正在传递一个函数。。。不过,您可能需要使用=
。您的数组实际上是对象
而不是数组
。你不能在对象上使用.each()
。使用对象.值不是更好吗?我想你的意思是“如果所有值都为false
”@Andy也会加上这一点。幸运的是,你失去了.each
或的短路优势。有些。嗯。。。我对此表示怀疑。当我在Firefox中重新运行测试时,结果会前后翻转。从逻辑上讲,短路版本应该更快,但这永远不能保证。无论如何,在短剧中,这肯定不会产生明显的区别。在大范围内,我肯定想早点停下来。无论这是否更快,。每一个()
看起来都更清晰,IMHO。似乎有很多程序员认为。reduce()
是正确的答案,只要你能找到一种使用它的方法。我已经编写了很长时间的程序,对函数式编程有很好的掌握,但我仍然需要努力思考,以理解人们试图使用。reduce()的一些方法
进入到他们的解决方案中。@barmar是这样的。但我认为这是一个罕见的用例。这也是一个好方法,尽管自从使用箭头函数以来,使用内置的布尔值变得不那么吸引人。一些(b=>b)
更短,并且具有相同的结果。