我有这个对象(它具有比此处列出的更多属性,具有不同的值):
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
中的属性答案 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)