我正试图找到一种使用类似于SQL的查询语法来过滤js集合的方法。
我发现完成此任务的唯一库是json-query。
在某些情况下它可以工作,但是有局限性。不可能在同一查询的不同对象级别上进行查询,也不能查询多个结果。
以下是一些示例(以下面的数据结构为参考)
[{
"type": "UU",
"value": "100",
"tipo": "G",
"strumento": "P",
"aspetto": "C",
"unit": "ml"
},
{
"type": "PS",
"value": "120/88",
"rilevamento": "Manuale",
"lato": "SX",
"part": "Supina",
"unit": "mmHg"
},
{
"type": "TP",
"value": "33.6",
"tipo": "T",
"unit": "°C"
},
{
"type": "VO",
"value": "12",
"tipo": "VOAL",
"unit": "ml"
},
{
"type": "RS",
"value": "60",
"unit": "atti/min"
},
{
"type": "HH",
"value": "180",
"modalita": "R",
"unit": "cm"
},
{
"type": "AA",
"value": "50",
"unit": "cm"
},
{
"type": "PO",
"value": "70",
"rilevamento": "Manuale",
"tipo": "FA",
"sede": "PC",
"unit": "bpm"
}
]
[type = TP&value> 30](适用于json-query)
[type = TP&value> 30&type = UU的值> 90](不适用于json查询)
答案 0 :(得分:1)
我认为您应该使用JsLinq
$helperForm->tpl_vars = array(
'fields_value' => array(
'nameofmycolorpicker' => '#3399ff',
),
);
答案 1 :(得分:1)
通过简短地查看json-query页面,我认为您的第二个查询是错误的。不带*的查询将仅返回一条记录。这样,您的查询就没有意义了,您无法拥有一项具有两种不同类型的项目。我认为您的查询应如下所示:
[* type = TP和值> 30 |类型= UU&值> 90]
我可能是错的,我从未使用过该库。
编辑评论
您无法通过简单查询来执行此操作,因为每个对象均已通过查询进行测试,如果适合则不返回布尔值。您需要按第一个条件过滤数据,并按第二个条件过滤结果过滤器。
var tempData = jsonQuery('[* type = TP & value > 30]', {data: data}).value;
var result = jsonQuery('[* type = UU & value > 90]', {data: tempData }).value;
编辑-可能的解决方案
如果您需要事先创建查询,我会考虑使用数组存储单个查询,然后按顺序应用它们。我不知道您是在JS还是在服务器上创建查询,所以我用JS编写了代码以保持代码一致性。
var result;
var queryArray;
queryArray.push("[* type = TP & value > 30]");
queryArray.push("[* type = UU & value > 90]");
for (i = 0; i < queryArray.length; i++) {
result = jsonQuery(queryArray[i], {data: result }).value;
}