Javascript 循环遍历项目数组的更好方法

Javascript 循环遍历项目数组的更好方法,javascript,arrays,typescript,Javascript,Arrays,Typescript,我有一个模型,如下所示 this.Model Model {class: undefined items: Array(0) tag: undefined launch: undefined length: undefined name: undefined Id: "de4d704a-b754-4546-b3ab-f0c131eba84a" time: "15:36" tonnage: undefined} 模型中唯一始终具有值的对象是Id和时间 我

我有一个模型,如下所示

this.Model

Model {class: undefined items: Array(0) tag: undefined launch: undefined length: undefined name: undefined Id: "de4d704a-b754-4546-b3ab-f0c131eba84a" time: "15:36" tonnage: undefined}
模型中唯一始终具有值的对象是Id和时间

我有一个if语句,它通过我的每个对象检查它是否为null,如下所示:

    if ( this.Model.class == null && this.Model.name == null && this.Model.tag== null && this.Model.launch == null && this.Model.length == null && this.Model.tonnage == null && this.Model.items.length == 0) 
                {
                    //does something in here
                }

因此,我想检查除时间和ID之外的所有对象是否都为null,有没有比在if语句中使用上述方法更好的方法呢?

在这种情况下,您有两个选项:

  • 将循环放在函数中,以将此逻辑与模型分离:
  • 使用Object.values和every作为数组检查属性

  • 我将创建一个函数,使用
    Object.entries
    Array.every
    检查这一点

    此解决方案的优点:

    • 可重用的实用功能
    • 使用任意数量的要忽略的关键点
    • 如果指定要忽略的键不是所提供对象的一部分,则函数的键入将引发错误


    Javascript中的代码片段

    函数checkAllKeysExceptGivenKeysToBeNullable(obj,键){
    返回Object.entries(obj).every(([
    钥匙
    价值
    ]) => {
    //如果必须忽略该键
    if(键。包括(键)){
    返回true;
    }
    //检查该值是否可为空
    返回值===null||
    值===void 0||
    (数组的值实例&&value.length==0);
    });
    }
    console.log(checkAllKeysExceptGivenKeysToBeNullable({
    类别:未定义,
    项目:数组(0),
    标签:未定义,
    发射:未定义,
    长度:未定义,
    名称:未定义,
    Id:'de4d704a-b754-4546-b3ab-f0c131eba84a',
    时间:15:36,
    吨位:未定义,
    }, [
    “Id”,
    “时间”,
    ]));
    console.log(checkAllKeysExceptGivenKeysToBeNullable({
    类别:未定义,
    项目:数组(0),
    标签:'不',
    发射:未定义,
    长度:未定义,
    名称:未定义,
    Id:'de4d704a-b754-4546-b3ab-f0c131eba84a',
    时间:15:36,
    吨位:未定义,
    }, [
    “Id”,
    “时间”,
    
    ]));在玩了一会儿之后,我用
    Object.keys()想出了一个解决方案。


    如果除ID和时间外的所有属性都为空,则返回true。

    通常,提供答案而不是重定向到链接会很有用。如果您认为此问题与现有问题重复,您可以随时使用注释通知。我有一个简短的问题,因为我有一个存储值的“this.model”。调用this.checkAllExceptGivenKeyTobeNullable()函数时。如何将此.model实例传递给它?示例:在
    model
    是类A的属性的情况下。如果将
    checkAllExceptGivenKeysToBeNullable
    放入A中,可以将其称为
    this.checkAllExceptGivenKeysToBeNullable(this.model,['Id','time'])
    Example:在model是类A的属性的情况下。如果将checkAllExceptGivenKeysToBeNullable作为静态方法放入名为B的实用程序类中,则可以将其称为
    B.checkAllExceptGivenKeysToBeNullable(this.model,['Id','time'])
    function checkProperties(obj) {
        for (var key in obj) {
            if (obj[key] !== null && obj[key] != "")
                return false;
        }
        return true;
    }
    
    var obj = {
        x: null,
        y: "",
        z: 1
    }
    
    checkProperties(obj) //returns false
    
    let report = {
      property1: null,
      property2: null,
    }
    
    let result = !Object.values(report).every(o => o === null);
    
    console.log(result);
    
    /**
     * Checks if all of the objects values are null, except for keys in param except
     * @param obj: The object to test
     * @param except (optional): keys to omit the null check on
     */
    function checkIfPropertiesNull(obj: {[key: string]: unknown}, except: string[] = []): boolean {
       const keys = Object.keys(obj).filter(key => !except.includes(key));
       for(const key of keys){
           if(obj[key] !== null){
               return false;
           }
       }
       return true;
    }
    
    
    console.log(checkIfPropertiesNull({ id: 1, name: 'mike', city: null }, ['id', 'name'])); // true, because id and name are not checked
    console.log(checkIfPropertiesNull({ id: 1, name: 'mike', city: 'Munich' }, ['id', 'name'])); // false, city isn't null
    
    for (let prop in Modal) {
        if (Modal.prop != time && Modal.prop != id && Modal[prop] != null) {
            return false
        }
        
    }
    return true