跳到主要内容

数据处理

集成

基础依赖已包含该组件,可直接使用。

使用 JS ES5 语法。

变量

//字符串
str = "张三";
//字符串拼接,有参数:name = "张三",age = 20
desc = "我是"+name+",我今年"+age+"了";
//数字
num = 2;
//计算,有参数:a = 1,b = 2
c = a+b+1;
//数组
list = [1,2,3,4];
//对象
json = {
a:1,
b:2
};
//创建 java 对象
list = new java.util.ArrayList();

ArrayList = Java.type("java.util.ArrayList");
list = new ArrayList();

取值

//上下文中有参数:a = 1,现要把 a 的值赋给 b
b = a
//上下文中有对象:obj = { "a":1 },现要把 a 的值赋给 b
b = obj.a

使用js内置函数

提示

param 为组件外变量时,使用 this.param,this 为流程的上下文

isBlank(param) //param 为 String
isNotBlank(param) //param 为 String
isNull(param)//param 为 Object
isNotNull(param)//param 为 Object
isEmpty(param)//param 为 List、String、Object
isNotEmpty(param)//param 为 List、String、Object

ES5中数组的处理

var arr = [1,2,3,4];
//返回第一个1的索引
first = arr.indexOf(1);
//返回最后一个数值3的索引
last = arr.lastIndexOf(3);
//数组向后添加元素
arr.push(5);
//数组向前添加元素
arr.unshift(0);
//数组反转
arr.reverse();
//数组转换成字符串
join = arr.join();
//删除第一个元素
arr.shift();
//截取元素产生新数组
//第一个参数为从哪个索引开始截取,包括当前元素
//第二个参数为到这个索引结束,不包括当前元素
arrSlice = arr.slice(1,3);
//对数组进行排序
arr.sort();
//concat()连接两个或者更多的数组并返回结果
arrtest = arr.concat(arr1);
//删除并返回数组最后一个元素
value = arr.pop();

ES5对于数组的循环处理和方法的创建和使用

var arr = [1,2,3,4];
//方法的创造以及map方法的使用
var doubles = arr.map(function(x) {
return x * 2;
});

//构造一个比较数组元素的方法
function isBigEnough(element, index, arr) {
return element < 10;
}
/方法的使用和数组的循环
//每一项为true,才返回true
result = arr.every(isBigEnough);
//some循环操作
reslut1 = arr.some(isBigEnough);
//foreach数组循环遍历
items = ["item1","item2"];
var copy = [];
items.forEach(function(item){
copy.push(item)
});
//filter方法遍历数组
words = ["spray", "limit", "elite", "exuberant", "destruction", "present", "happy"];
longWords = words.filter(function(word){
return word.length > 6;
});

ES5中对于字符串的处理

//返回指定位置的字符
str="abc"
char = str.charAt(0)//a

//连接字符串concat
var a = "abc";
var b = "def";
var c = a.concat(b);//abcdef

//indexOf()检索字符串,对大小写敏感
var str="Hello world!"
result1 = str.indexOf("Hello");//0
result1 = str.indexOf("World");//-1
result1 = str.indexOf("world");///6

//match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。
var str = "1 abc 2 def 3";
result = str.match(/\d+/g);

//replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串
var str="abc Def!";
result = str.replace(/abc/, "CBA");

使用海牛函数

//有函数 strUpperCase(),其能力是将字符串转成全大写形式
a = _fun.strUpperCase("abc");
//结果:a = "ABC"

使用 java 工具类

if(com.manatee.common.util.StringUtil.isBlank(xxx)){
...
}

if 逻辑

 
`判断对象不能为 null `
if(isNotNull(this.param)){
//...
}

`判断字符串不能为 blank `
if(isNotBlank(this.str)){
//...
}

`判断 list 不能为 empty `
if(isNotEmpty(this.list)){
//...
}

`逻辑符号`
: && 或:||

循环逻辑

// 循环集合 list 
for ( index = 0; index < list.size(); index++) {
one = list.get(index);
}

for each( one in list){

}

// 循环 map
for each (key in map.keySet()) {

}
for each (val in map.values()) {

}

switch case 逻辑

var d=new Date().getDay();
switch (d)
{
case 0:x="今天是星期日";
break;
case 1:x="今天是星期一";
break;
case 2:x="今天是星期二";
break;
case 3:x="今天是星期三";
break;
case 4:x="今天是星期四";
break;
case 5:x="今天是星期五";
break;
case 6:x="今天是星期六";
break;
}

集合

list = new java.util.ArrayList();
list.add(1);
list.add(2);

对象

obj = new java.util.HashMap();
obj.put("name", "张三");
obj.put("age", 20);

引入常用包

load("nashorn:mozilla_compat.js");
importPackage("java.util");

list = new ArrayList();
list.add("a");
list.add("b");

map = new HashMap();
map.put("a", "a");
map.put("b", "b");

set = new HashSet();
set.add("a");
set.add("a");

uuid = UUID.randomUUID();

// ------------------------------------------------

importPackage("java.lang");

l = new Long(123);
d = new Double(3.1415926);
f = new Float(Math.E);
s = new Short("1");

sb = new StringBuffer();
sb.append("a --- ");
sb.append("b --- c");
sb.delete(sb.length() - 1, sb.length());

// ------------------------------------------------

importPackage("com.alibaba.fastjson");

jsonObject = new JSONObject();
jsonObject.put("a", "a");
jsonObject.put("b", "b");
strings = jsonObject.keySet();
a = jsonObject.get("a");
jsonObject.remove("b");

jsonArray = new JSONArray();
jsonArray.add("a");
jsonArray.add(true);
jsonArray.add(123);
value_0 = jsonArray.get(0);
isEmpty = jsonArray.isEmpty();
arrayContainsA = jsonArray.contains("a");

// ------------------------------------------------

inport = new JavaImporter(java.util, java.io, com.alibaba.fastjson, java.lang);
with(inport) {
// 作用域
l = new Long(123);
d = new Double(3.1415926);
f = new Float(Math.E);
s = new Short("1");

sb = new StringBuffer();
sb.append("a --- ");
sb.append("b --- c");
sb.delete(sb.length() - 1, sb.length());

list = new ArrayList();
list.add("a");
list.add("b");

map = new HashMap();
map.put("a", "a");
map.put("b", "b");

set = new HashSet()
set.add("a");
set.add("b");
set.add("b");

jsonObject = new JSONObject();
jsonObject.put("a", "a");
jsonObject.put("b", "b");
strings = jsonObject.keySet();
a = jsonObject.get("a");
jsonObject.remove("b");

jsonArray = new JSONArray();
jsonArray.add("a");
jsonArray.add(true);
jsonArray.add(123);
value_0 = jsonArray.get(0);
isEmpty = jsonArray.isEmpty();
arrayContainsA = jsonArray.contains("a");
}

场景记录

1、有以下这种情况,由于数据处理组件当中支持java类,所以为增强代码的可读性,建议大家使用如下形式

 currentData = new java.util.HashMap();
beforeData = new java.util.HashMap();
//这处使用的就是java类调用函数获取map值的方式,建议大家使用这种方式
if (currentData.get("doctorId")== beforeData.get("doctorId")) {
currentData.put("doctorId", "_cellMergeUp");
}
}

2、如果需要查看变量类型,可以使用如下方式

log.info("info : {}", student.getClass());

演示视频