簡體   English   中英

如何僅動態地修改某些對象屬性

[英]how to modify only some object properties dinamically

我有這個對象(它的屬性比這里列出的要多得多,具有不同的值):

var dbValuesObj = {
    //1. group of properties that I don't want to touch(I don't want to check the values for these)
    rebateNetSaleMinAmt1: 500,
    rebateNetSaleMaxAmt1: 400,
    rebateAmtWoProd1: 0,
    rebateAmtAllProd1: 200,
    rebateAmtOneProd1: 0,

    //2. group of properties that I want to change (I know exactly what is the list of the properties that I want to check and change their values, if they are equal to 0)
    rebateNetSaleMinAmt2: 100,
    rebateNetSaleMaxAmt2: 0,
    rebateAmtWoProd2: 300,
    rebateAmtAllProd2: 0,
    rebateAmtOneProd2: 700
}

我需要從#2點更改對象屬性的值為0的值。因此,在我的情況下,我想將rebateNetSaleMaxAmt2和rebateAmtAllProd2更改為其他值。 但是我不想從#1檢查或更改屬性

我嘗試使用

for(var property in dbValuesObj)

但我檢查了所有屬性,但不想查看/更改/檢查#1中的屬性

我需要從#2點更改對象屬性的值為0的值。因此,在我的情況下,我想將rebateNetSaleMaxAmt2和rebateAmtAllProd2更改為其他值。

您可以先將它們過濾掉

var requiredKeys = Object.keys( dbValuesObj ).filter( k => k.slice(-1) == "2" && dbValuesObj[k] == 0 );

現在您可以迭代此requiredKeys數組

requiredKeys.forEach( function( key ){
   console.log( key, dbValuesObj[key]  )
})

對於您提供的數據,它將打印

“ rebateNetSaleMaxAmt2” 0

“ rebateAmtAllProd2” 0

您需要檢查property是否以“ 2”結尾以及屬性的value是否為0。

要從property字符串中獲取最后一個值,您可以執行以下操作:

property[property.length-1];

然后,要獲取屬性的value ,可以執行以下操作:

dbValuesObj[property];

現在,您知道如何獲取必需的組件,可以在for循環中使用if語句檢查該屬性是否滿足您的要求(以“ 2”結尾且值為0),然后將該值更改為您所需要的值希望如此。 (在代碼段中,我將其設置為1)

檢查代碼片段以獲取工作示例:

 var dbValuesObj = { rebateNetSaleMinAmt1: 500, rebateNetSaleMaxAmt1: 400, rebateAmtWoProd1: 0, rebateAmtAllProd1: 200, rebateAmtOneProd1: 0, rebateNetSaleMinAmt2: 100, rebateNetSaleMaxAmt2: 0, rebateAmtWoProd2: 300, rebateAmtAllProd2: 0, rebateAmtOneProd2: 700 } for (var property in dbValuesObj) { var value = dbValuesObj[property]; if (property[property.length - 1] === "2" && value === 0) { dbValuesObj[property] = 1; // Change the value to a new value (ie 1) } } console.log(dbValuesObj); 

function updateGroup(obj, defaultValue, grpNum) {
  for(prop in obj ) {
   var index = parseInt(prop.match(/\d+$/)[0]);

   if(index === grpNum && obj[prop] === 0) {
    obj[prop] = defaultValue;
   } 
   if(index > grpNum) { // if properties are in number order. else remove this.
    return;
  }}

  return; 
}

updateGroup(dbValuesObj, 100, 2);

您可以通過將groupNumber和defaultValue設置為該組中的0來嘗試此操作。

所以這就是我解決問題的方式謝謝大家的回答

//Define the properties that we want to check for 0 value
    var arrayOfPropsToCheck = ["rebateNetSaleMinAmt1", "rebateNetSaleMaxAmt1", "rebateAmtWoProd1", "rebateAmtAllProd1", "rebateAmtOneProd1",
                               "rebateNetSaleMinAmt2", "rebateNetSaleMaxAmt2", "rebateAmtWoProd2", "rebateAmtAllProd2", "rebateAmtOneProd2",
                               "rebateNetSaleMinAmt3", "rebateNetSaleMaxAmt3", "rebateAmtWoProd3", "rebateAmtAllProd3", "rebateAmtOneProd3",
                               "rebateNetSaleMinAmt4", "rebateNetSaleMaxAmt4", "rebateAmtWoProd4", "rebateAmtAllProd4", "rebateAmtOneProd4",
                               "rebateNetSaleMinAmt5", "rebateNetSaleMaxAmt5", "rebateAmtWoProd5", "rebateAmtAllProd5", "rebateAmtOneProd5",
                               "rebateNetSaleMinAmt6", "rebateNetSaleMaxAmt6", "rebateAmtWoProd6", "rebateAmtAllProd6", "rebateAmtOneProd6",
                               "rebateNetSaleMinAmt7", "rebateNetSaleMaxAmt7", "rebateAmtWoProd7", "rebateAmtAllProd7", "rebateAmtOneProd7"];

    //Check the properties in the dbValuesObj object
    for (var property in dbValuesObj) {

      //Get the value for the property
      var value = dbValuesObj[property];

      //Define flag
      var isInArray = false;

      //Get the values from the arrayOfPropsToCheck
      for(var k = 0; k < arrayOfPropsToCheck.length; k++){

        //Compare if the name of the property is equal to the one found in the array and set flag to true
        if(arrayOfPropsToCheck[k] == property){
          isInArray = true;
        }
      }
      //If propery is in arrayOfPropsToCheck and has value 0 change it to empty string
      if(isInArray && value === "0"){
          dbValuesObj[property] = ""; 
      }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM