У меня есть этот объект (у которого есть намного больше свойств, чем указано здесь, имеющих разные значения):
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
Так вот как я решил свою проблему. Спасибо всем за ответы.
//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] = "";
}
}
Вам нужно проверить, заканчивается ли property
с "2" и value
свойства 0.
Чтобы получить последнее значение из строки property
вы можете сделать следующее:
property[property.length-1];
Затем, чтобы получить value
свойства, вы можете сделать это:
dbValuesObj[property];
Теперь, когда вы знаете, как получить требуемые компоненты, вы можете использовать оператор 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);
Мне нужно изменить значения свойств объекта из пункта №2, которые имеют значение 0. Поэтому в моем случае я хочу изменить rebateNetSaleMaxAmt2 и rebateAmtAllProd2 на другое значение.
Вы можете сначала отфильтровать их
var requiredKeys = Object.keys( dbValuesObj ).filter( k => k.slice(-1) == "2" && dbValuesObj[k] == 0 );
Теперь вы можете выполнить итерацию этого requiredKeys
массива Keys
requiredKeys.forEach( function( key ){
console.log( key, dbValuesObj[key] )
})
Для данных, которые вы предоставили, он распечатает
"rebateNetSaleMaxAmt2" 0
"rebateAmtAllProd2" 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
в этой группе.
if (property ends with "2" and the value is zero) { ... }