[英]Extract data from Nested Array Object
以下是 JSON 是從 Datatables 的 Search Builder 插件生成的,我想在不使用任何庫的情況下使用 javascript 以下列格式顯示 output。
(Registration=1)OR((Registration=2)OR(Number=3))OR(Number=4)OR(Station=Yes)
var sbfilter = {
"criteria": [
{
"condition": "=",
"data": "Registration",
"value": [
"1"
]
},
{
"criteria": [
{
"condition": "=",
"data": "Registration",
"value": [
"2"
]
},
{
"condition": "=",
"data": "Number",
"value": [
"3"
]
}
],
"logic": "OR"
},
{
"condition": "=",
"data": "Number",
"value": [
"4"
]
},
{
"condition": "=",
"data": "Station",
"value": [
"Yes"
]
}
],
"logic": "OR"
};
這就是我現在能想到的,通過每個嵌套數組使用循環和遞歸到 go 並制作查詢字符串。 算法可以改進。
var sbfilter = { "criteria": [ { "condition": "=", "data": "Registration", "value": [ "1" ] }, { "criteria": [ { "condition": "=", "data": "Registration", "value": [ "2" ] }, { "condition": "=", "data": "Number", "value": [ "3" ] } ], "logic": "OR" }, { "condition": "=", "data": "Number", "value": [ "4" ] }, { "condition": "=", "data": "Station", "value": [ "Yes" ] } ], "logic": "OR" }; var query = ''; function makeQuery(criteria, logic) { criteria.forEach((c, idx, array)=>{ if (c.criteria) { // Add a parentheses since it's the start of a sub query query+='(' makeQuery(c.criteria, c.logic) // Close the parentheses query+=')' } else { query+= '('+c.data+c.condition+c.value[0]+')' } // Check if not the last condition then add the logic to it if (idx.= array.length - 1) { query+=logic } }) } makeQuery(sbfilter,criteria. sbfilter.logic) console.log(query)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.