JavaScript对象的复杂SQL查询

5
我有以下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,所以才会出现这种情况。

我找到了关于SQLikeJSLINQ的信息,但是在使用where inhaving表达式时遇到了问题。是否有可能使用SQL-JS库或JS / jQuery本身(编写函数等)在JavaScript对象上执行此类查询?

2个回答

5

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中尝试这个示例
我修改了一下SQL表达式,因为Alasql不支持HAVING子句内的聚合函数(如COUNT、SUM、MAX、MIN)。

1

我不太明白你的问题,但是通过使用jQuery,您可以按照以下方式过滤groups对象:

var filteredArr = $.grep(groups, function(obj, index) {
   return obj.id_group === "2"
});

希望有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接