跳到主要内容

取值

对象取值

DataQL 支持面向对象中的取值方式,例如下面几个例子:

var userInfo = {
'id': 4,
'username': '马A'
}
// 返回用户ID为4的用户名
return userInfo.username;

函数结果取值

// userInfo 返回和上述例子相同结构的数据
var userInfo = userByID({'id': 4});
// 在函数返回值后直接取值
return userByID({'id': 4}).username;

数组中取值

var userInfo = [
{
'id': 4,
'username': '马A'
},{
'id': 2,
'username': '马B'
}
]
// 返回用户列表中第一条数据的用户名
return userList()[0].username;

下标取值

DataQL 支持类似 JavaScript 中类似的下标方式取值。在 DataQL 中有结构的数据只有两种:集合Map

因此带有结构的对象类型数据其就相当于一个 Map,可以通过下面的方式来获取属性值。

var userInfo = {
'id': 4,
'username': '马A'
}
return userInfo['username'];

连续下标取值

var userList = [
{
'id': 4,
'username': '马A'
},{
'id': 2,
'username': '马B'
}
]

// 返回用户列表中第一条数据的用户名
return userList[0]['username'];

数组下标取值

对于数字形式的下标分为:正向索引反向索引 两种。例如:有一个数据集:

var list = [0,1,2,3,4,5,6,7,8,9]

正向索引:正数,从前向后数,从 0 开始。

list[3] = 3
list[5] = 5

反向索引:负数,从后向前数,从 1 开始。

list[-3] = 7
list[-5] = 5

索引溢出:无论正向还是反向,都会涉及到下标越界问题,这种情况称之为索引溢出。DataQL 有三种可以选择的处理行为:

行为DataQL 语句功效
throwhint INDEX_OVERFLOW = 'throw'当遇到索引溢出情况时严格的抛出,ArrayIndexOutOfBoundsException 异常
nullhint INDEX_OVERFLOW = 'null'当遇到索引溢出情况时返回 null
near(默认)hint INDEX_OVERFLOW = 'near'正向索引溢出 list[100] 取最后一个,反向索引溢出 list[-100] 取第一个

下标变量

DataQL 允许使用变量替代下标中的值,这使得下标取值可以更加灵活。

var userInfo = {
'id': 4,
'username': '马A'
}

// 定义一个变量,变量表示要取值的字段名。
var columnKey = 'username';
// 通过下标变量方式来取值
return userInfo[columnKey];