我有以下JS对象:
var groups = [{id="4", name="abcd", id_group="1"},
{id="5", name="efgh", id_group="1"},
{id="6", name="ijkl", id_group="1"},
{id="4", name="abcd", id_group="2"},
{id="7", name="mnop", id_group="2"}]
我需要在上述对象上执行此SQL查询:
select id_group from groups where id in (4,7)
group by id_group having count(distinct id) = 2
结果应该是:
id_group="2"
因为只有该组包含在查询中使用的两个ID。
我找到了有关SQLike和JSLINQ的信息,但我遇到了的问题,其中和有表达式。是否有可能使用SQL-JS库或JS / jQuery本身(编写函数等)对javascript对象执行此类查询?
答案 0 :(得分:1)
我不太明白你在问什么,但是使用jQuery你可以按如下方式过滤groups对象:
var filteredArr = $.grep(groups, function(obj, index){
return obj.id_group === "2"
});
希望有所帮助。
答案 1 :(得分:0)
Alasql JavaScript SQL库专为此类任务而设计:
<script src="alasql.min.js"></script>
<script>
var groups = [{id:4, name:"abcd", id_group:"1"},
{id:5, name:"efgh", id_group:"1"},
{id:6, name:"ijkl", id_group:"1"},
{id:4, name:"abcd", id_group:"2"},
{id:7, name:"mnop", id_group:"2"}];
var res = alasql('select id_group, count(id) as cnt from ? \
where id in (4,7) group by id_group having cnt = 2',[groups]);
</script>
您可以在jsFiddle中尝试this example。
我修改了一点SQL表达式,因为Alasql不支持HAVING子句中的聚合器函数(如COUNT,SUM,MAX,MIN)。