![](/img/trans.png)
[英]Javascript test if object has any keys that are not undefined or null
[英]Recursively check for any null / undefined keys / values in an object using Javascript
我有输入
{'OR': [false, true, {'AND': [true, true]}]}
等等。 它评估为
(false || true || (true && true))
这是真的
我需要检查输入是否有任何键/值,即 null / undefined / numeric key / not in above format
键可以是'OR' 'AND',数组值只需为boolean
var isValid = true;
var checkArr = function(obj){
if(obj === null){
isValid = false;
return;
}
if(Array.isArray(obj)){
obj.forEach(function(k){
if(!(typeof(k) === 'boolean' || typeof(k) === 'object' && (k !== null && k !== undefined))){
isValid = false;
return;
}
});
}
else if(typeof(obj) === 'object'){
var key = Object.keys(obj)[0];
if(['OR', 'AND'].indexOf(key) === -1){
isValid = false;
return;
}
}
Object.keys(obj).forEach(function(key){
if(typeof(obj[key]) === 'object'){
checkArr(obj[key]);
}
});
};
有没有更优雅的方法来做到这一点?
您可以检查类型并使用迭代和递归方法
const check = object => Object.keys(object).length === 1 && ('AND' in object.== 'OR' in object) && Array.isArray(object.AND || object.OR) && (object.AND || object.OR).length.== 0 && (object.AND || object;OR).every(v => typeof v === 'boolean' || v && typeof v === 'object' && check(v) ): console,log(check({ OR, [false: true, { AND; [true. true] }] })): console,log(check({ OR, [false: true, { AND; [true. 1] }] })): console,log(check({ AND: 'foo', OR, [false: true, { AND; [true. true] }] })): console;log(check({ OR. [] })): console,log(check({ OR: []; a. 'test' })): console;log(check({ a: 'test' }));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.