检查Javascript对象是否只包含错误的值
Check if Javascript Object only contains falsy values
我得到了一个这样的对象:
var obj1 = {foo: false, bar: ''};
var obj2 = {foo: false, bar: '1'};
var obj3 = {foo: true, bar: ''};
var obj4 = {foo: true, bar: '1'};
我想要一个简单的函数来检查这些对象是否所有的值都为false。在这个给定的例子中,只有obj1应该触发false,因为它们的所有值都是false。obj2
、obj3
和obj4
具有至少一个为真的值。
有简单的解决方案吗?
作为一行:
!Object.keys(obj1).some(function(k) {return obj1[k];});
// Array.some returns true if any callback returns true
// You want true if all return false, aka if none return true
// So just negate Array.some
作为一种可读性更强的方法:
var ok = true, k;
for( k in obj1) if( obj1.hasOwnProperty(k)) {
if( obj1[k]) {
ok = false;
break;
}
}
您可以使用some函数:
[ob1, ob2, ob3, obj4].some(function(obj) { return obj.foo })
对于每个对象:如果每个属性值都是false
,则返回false
,否则返回true
:
var out = [obj1, obj2, obj3, obj4].map(function (obj) {
return !Object.keys(obj).every(function (p) {
return !obj[p];
})
}); // [false, true, true, true]
演示
.some()
的其他实现存在一个缺陷,您希望返回所有属性都是错误值的值,而不仅仅是根据OP要求,任何属性都是虚假值的值。
所以这将做到
function isFalse(obj) {
return Object
.keys(obj)
.every(function (k) {
return !obj[k];
});
}
请参阅jsFiddle以获取证据https://jsfiddle.net/0se3yh62/
Object.keys的另一个好处是,它只返回自己的属性,因此不必在手动循环中进行检查。
const isObjectFilled = obj => Object.values(obj).filter(value => !!value).length > 0
isObjectFilled(obj1) // false
isObjectFilled(obj2) // true
isObjectFilled(obj3) // true
isObjectFilled(obj4) // true
"Object.values()
方法返回给定对象自己的可枚举属性值的数组"(MDN)
一旦我有了这个值数组,我将通过删除每个错误的值来过滤它。
.filter(value => !!value)
将通过仅返回真实值来过滤数组。
如果过滤后的数组的长度大于0,则意味着至少有一个对象的值是真实的。然后函数将返回true
如果过滤后的数组为空,则表示对象的所有值都是错误的。然后函数将返回false
我想你想要一个可以在任何对象上工作的动态函数,那么迭代对象的所有索引怎么样?
function objIsFalsy(obj) {
for(var i in obj) {
if(obj[i]) return false;
}
return true;
}
按照以下步骤操作:-
- 将所有对象变量放在一个数组中
- 为上面的数组做一个foreach循环
- 在循环内部检查对象键的值
对象上的循环:
function isFalsyObj(obj) {
for(var elt in obj) if (obj[elt]!=false) return false;
return true;
}
var obj1 = {foo: false, bar: ''};
var obj2 = {foo: false, bar: '1'};
var obj3 = {foo: true, bar: ''};
var obj4 = {foo: true, bar: '1'};
console.log(isFalsyObj(obj1));//true
console.log(isFalsyObj(obj2));//false
console.log(isFalsyObj(obj3));//false
console.log(isFalsyObj(obj4));//false
检查此
isvalidObj(obj1);//错误
isvalidObj(obj2);//真实
function isvalidObj(obj){
for(var i in obj){
if(obj[i]) return true;
}
return false;
}
相关文章:
- 我如何修复包含在captcha的addthis中的错误
- FriendsOfSymfony/FOSJsRoutingBundle包含错误
- 预期响应包含一个对象,但在angular js中得到一个数组错误
- fs.statSync包含在函数中时抛出错误
- 为什么jqPlot显示了一个错误的饼图,其中包含通过AJAX检索的数据
- 我收到一个类型错误,其中包含-"$不是函数“;使用noConflict时
- 包含的文件中引发引用错误..除非调用文件包含慢速代码
- ASP.NET MVC - 未捕获的引用错误:即使我包含库,也不会定义jQuery
- Sonar Javascript插件错误:“无法装饰”和“在其源文件夹中不包含任何文件”
- 打字稿错误:P roperty'包含'在类型'元素'上不存在
- 无法修改Controls集合,因为控件包含代码块(即<%.%>).无法更正此错误
- IE8对象当对象包含null值时应出现错误
- "未终止的模板文字“;当文字包含脚本标记时出现语法错误
- 我们如何捕捉主文件中包含的javascript文件引发的错误
- WebGL错误-错误:WebGL:bindBuffer:buffer已包含元素数据
- 不兼容的数据表: 错误:表包含的列数超过预期
- 火狐 SDK 错误“图像包含错误,无法显示”
- 变量错误消息=“ ”;中应包含的对象
- 未捕获的引用错误:包含列表中值的警报框
- 错误“包含”未定义在谷歌地图 JS API 中