Skip to content

Instantly share code, notes, and snippets.

@highoncarbs
Created September 22, 2023 09:58
Show Gist options
  • Save highoncarbs/1d45605fc345e94bc2a5851d3f37195c to your computer and use it in GitHub Desktop.
Save highoncarbs/1d45605fc345e94bc2a5851d3f37195c to your computer and use it in GitHub Desktop.
const jsondata = {
"operator": "and",
"rules": [
{
"operator": "and",
"rules": [
{
"operator": "and",
"rules": [
{
"first": {
"name": "hra"
},
"second": "4000",
"compare_operator": "+",
"second_value_type": "value"
}
],
"first": {
"name": "location"
},
"second": {
"name": "abroad"
},
"compare_operator": "=",
"second_value_type": "master"
}
],
"first": {
"name": "basic"
},
"second": "0.4",
"compare_operator": "*",
"second_value_type": "value"
}
]
} // Try edit me
let formula = "";
formula = formula + jsondata.rules[0].first.name + jsondata.rules[0].compare_operator
if (jsondata.rules[0].second_value_type == 'value') {
formula = formula + jsondata.rules[0].second
}
else{
formula = formula + jsondata.rules[0].second.name
}
jsondata.rules[0].rules.forEach(row => {
console.log('Row -- ',row)
let second_value = row.second_value_type == 'value' ? row.second : row.second.name
let rule_level_one = checkRule(row.first.name, row.operator, second_value) // Checks for true or false
console.log('Row --2 ',second_value)
if (rule_level_one) {
row.rules.forEach(sub_row => {
let second_sub_value = sub_row.second_value_type == 'value' ? sub_row.second : sub_row.second.name
let rule_level_two = checkRule(sub_row.first.name, sub_row.operator, second_sub_value) // Checks for true or false
if (rule_level_two) {
formula = formula + sub_row.first.name + sub_row.compare_operator + second_sub_value
}
})
}
console.log(formula)
})
console.log(formula)
function checkRule(one,operator,two){
if(operator == '=='){
return one == two
}
return false
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment