如何只修改一些对象属性

时间:2017-11-27 13:07:12

标签: javascript object properties

我有这个对象(它具有比此处列出的更多属性,具有不同的值):

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

中的属性

3 个答案:

答案 0 :(得分:0)

  

我需要从#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

答案 1 :(得分:0)

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设置的内容来尝试此操作。

答案 2 :(得分:0)

所以这就是我解决问题的方法 谢谢大家的答案

O(1)