如何让Alasql直接查询对象而非数组,使用->操作符提取嵌套值?
问题原因
AlaSQL 的 FROM 子句默认接收数组类型的数据源,数组中的每个元素会被识别为一行数据。你原来的写法传入的参数是 [data],此时数据源只有一行,行内容就是完整的 {a:{b:42}} 对象,语句中写 a->b 会尝试读取行的a属性,但这行本身没有a属性(a是整行值的根属性),自然返回undefined。
可行解决方案
1. 单对象查询(直接返回目标值)
用$指代当前行的完整值,搭配select value直接返回结果,不需要额外解析返回对象:
const data = {a:{b:42}}; // 注意数据源要包两层数组,第一层是参数列表,第二层是数据源本身 const answer = alasql('select value $->a->b from ?', [[data]]); // answer 直接等于 42
如果不需要直接返回值,要保留行对象格式,去掉value关键字即可:
const answer = alasql('select $->a->b as res from ?', [[data]]); // 返回 [ { res: 42 } ]
2. 多对象批量查询
如果是批量处理相同结构的嵌套对象,直接把所有对象放在一个数组里作为数据源,就可以直接用->操作符访问嵌套属性:
const data = [{a:{b:42}}, {a:{b:100}}, {a:{b:233}}]; const answer = alasql('select a->b from ?', [data]); // 返回 [ { 'a->b': 42 }, { 'a->b': 100 }, { 'a->b': 233 } ]
内容的提问来源于stack exchange,提问作者Category6
相关产品推荐
相关产品推荐

