【问题标题】:Recursively check for any null / undefined keys / values in an object using Javascript使用Javascript递归检查对象中的任何空/未定义键/值
【发布时间】:2021-03-21 08:23:24
【问题描述】:

我有类似的输入

{'OR': [false, true, {'AND': [true, true]}]}

等等。 它评估为

(false || true || (true && true)) 这是真的

我需要检查输入是否有任何键/值是空/未定义/数字键/不是上述格式

键可以是'OR' 'AND', 数组值只需为布尔值

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]);
                    }
                });
            };

有没有更优雅的方法来做到这一点?

【问题讨论】:

标签: javascript null-check


【解决方案1】:

您可以检查类型并使用迭代和递归方法

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' }));

【讨论】:

  • 你如何确保下面是无效的 {'OR': [], 'a': 'test'}
  • @user544079,它现在应该可以工作了。请参阅编辑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多