Javascript 如何通过键来编写和添加对象

Javascript 如何通过键来编写和添加对象,javascript,angularjs,Javascript,Angularjs,我正在使用javascript处理对象 1. Units = [ { "BedDetails": [ { "Outpatient": 2, "ICU_Beds": 0, "NL_Beds": 2, "Extra": 9, "Ordinary": 3, "ADM

我正在使用javascript处理对象

1.

Units = [
    {
        "BedDetails": [
            {
                "Outpatient": 2,
                "ICU_Beds": 0,
                "NL_Beds": 2,
                "Extra": 9,
                "Ordinary": 3,
                "ADMIN": 6,
                "SVC_Areas": 3.2 // It is different kind not type of bed
            }                  
        ]
    }, 
    {
        "BedDetails": [
            {
                "Outpatient": 4,
                "ICU_Beds":2,                
                "Extra": 2,
                "Ordinary": 2,
                "ADMIN":2,
                "SVC_Areas": 2.1  // It is different kind not type of bed
            }
        ]
    }
]
这里我需要执行三个操作

  • 按病床类型列出的总数
  • 如果床型类型大于0,则将SVC_面积之和作为SVC_床型
  • 床型/SVC_床型的比率 例如:

    • 第一步是总结床的类型
    • 第2步是,如果床型>0,则床型下的svc总和如下

      outmount>0=>SVC\U outmount=2

      ICU>0=>SVC\u ICU=0
      //此处ICU=0,因此执行求和

    • 步骤3是在步骤1/步骤2中获得的
      (床型总和)/SVC_床型的比率
    这是我到现在为止的表演

    Units.forEach(function (element) {               
        var Beds_Details = element.BedDetails[0];                   
        Sum_Outpatient += Beds_Details.Outpatient;
        Sum_ICUBeds += Beds_Details.ICU_Beds;                   
        Sum_Extra += Beds_Details.Extra;
        Sum_Ordinary += Beds_Details.Ordinary;
        Sum_ADMIN += Beds_Details.ADMIN;
    
        if (Beds_Details.Outpatient > 0) { (SVC_Outpatient += Beds_Details.SVC_Areas).toFixed(2); }
        if (Beds_Details.ICU_Beds > 0) { (SVC_ICUBeds += Beds_Details.SVC_Areas).toFixed(2); }                    
        if (Beds_Details.Extra > 0) { (SVC_Extra += Beds_Details.SVC_Areas).toFixed(2); }
        if (Beds_Details.Ordinary > 0) { (SVC_Ordinary += Beds_Details.SVC_Areas).toFixed(2); }
        if (Beds_Details.ADMIN > 0) { (SVC_ADMIN += Beds_Details.SVC_Areas).toFixed(2); }
    });
    
    if (SVC_Outpatient  > 0) { 
       RatioModel_Outpatient  = (Sum_Outpatient  / SVC_Outpatient ).toFixed(2); 
    } else { 
             RatioModel_Outpatient = 0; 
           };
    
    if (SVC_ICUBeds > 0) { 
        RatioModel_ICUBeds = (Sum_ICUBeds / SVC_ICUBeds).toFixed(2); 
    } else { 
            RatioModel_ICUBeds = 0; 
           };               
    
    if (SVC_Extra  > 0) { 
        RatioModel_EX_TR = (Sum_Extra  / SVC_Extra ).toFixed(2); 
    } else { 
              RatioModel_Extra  = 0; 
           };
    
    if (SVC_Ordinary  > 0) { 
        RatioModel_Ordinary  = (Sum_Ordinary  / SVC_Ordinary ).toFixed(2); 
    } else { 
                RatioModel_Ordinary  = 0; 
           };
    
    if (SVC_ADMIN > 0) { 
        RatioModel_ADMIN = (Sum_ADMIN / SVC_ADMIN).toFixed(2); 
    } else { 
             RatioModel_ADMIN = 0; 
            };
    
    虽然代码运行良好,但我需要通过Bed_details键循环优化代码


    任何人都可以帮助解决这两个问题吗

    根据我们的聊天,您的要求在这里实现。 您将在输出对象中获得输出

    在这里找到工作小提琴


    你能问两个问题吗?摆脱它。对你来说也更容易理解。你要找的是
    对象。键(卷)
    ,但它只返回键,你需要做一个循环来遍历它们,并访问所需的属性,以便清楚地解释你的第二个问题。最好是另一个qn@JinsPeter问题解释得很清楚。请check@charantej床的类型在哪里?Thanx对于所有的帮助和回答,需要对回答进行一个小的修改。在
    var bedItem
    u中,您已获取了属性名称,现在,当[0]中缺少一个属性,而remainingYeah中存在一个属性时,会发生什么情况。我已经看到了。您必须在BedDetails[0]中包含所有属性。或者,您必须创建一个新数组来循环使用keyarray=[“门诊”、“重症监护病房床位”、“管理员”]。@charantej您希望我也这样做吗。??请接受答案,并给我投票?
    var output = {};
    function getPropertySum(propertyName){
      var sum = 0;
      Units.forEach(function(obj){
          var item = obj.BedDetails["0"];
          sum =  sum + (item[propertyName]||0);
      });
      return sum;
    };
    function getPropertySVC(propertyName){
      var svc = 0;
      Units.forEach(function(obj){
        var item = obj.BedDetails["0"];
        if(item[propertyName]>0){
           svc = svc + (item.SVC_Areas||0);
        }
      });
      return parseFloat(svc.toFixed(2));
    };
    
    function getPropertyDetails(propertyName){
        var svc = getPropertySVC(propertyName);
        var sum = getPropertySum(propertyName);
        var ratio = svc === 0 ? 0: sum/svc;
        output["Sum_"+ propertyName] = sum;
        output["SVC_"+ propertyName] = svc;
        output["RatioModel_"+ propertyName] = parseFloat(ratio.toFixed(2));
    
    }
    
    var bedItem = Units[0].BedDetails[0];
    for(var property in bedItem){
        if(property!=="SVC_Areas"){
                getPropertyDetails(property);
        }  
    }
    console.log(output);