简体   繁体   English

从嵌套数组 Object 中提取数据

[英]Extract data from Nested Array Object

The following is JSON is generated from the Search Builder Plugin of Datatables and I would like to display the output in the following format using javascript without use of any library.以下是 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"
};

This is what I can think of right now, using a loop and a recursion to go through every nested array and make the query string.这就是我现在能想到的,通过每个嵌套数组使用循环和递归到 go 并制作查询字符串。 The algorithm can be improved.算法可以改进。

 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM