[英]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.