tansci/.claude/skills/magic-script/references/collection-extensions.md
xuewuerduo f468d532b1 feat: 初始化tansci资产管理项目
包含以下模块:
- antdv-next-admin: Vue 3 + TypeScript + Ant Design Vue 管理后台
  - 设备/许可证/配件/耗材 CRUD 管理页面
  - 基础数据管理 (分类/位置/制造商/型号/供应商)
  - 业务管理 (故障报修/盘点/资产分配/资产申请/交易记录)
  - 下拉选项改造 (ID输入框 → 搜索下拉选择)
  - 资产状态字典化 (接入sys_dict系统)
  - 界面文案优化 (设备→资产, 在库/在用/维修中/已报废)
  - 修复 console 警告 (popupClassName, 重复组件注册)
- our-itam: Java Spring Boot + magic-api 后端服务
- fantastic-admin: 前端底层框架 (pnpm monorepo)
- ciyo-itasset: CIYO 资产模块
- magic-script-skill: Claude Code skill 定义
- .claude: 对话历史记录

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-05-17 21:41:22 +08:00

305 lines
6.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 数组&集合扩展方法
为`Collection`,`Iterator`,`Enumeration`,`Object[]` 添加的扩展方法
## map
- 入参:`function`:`Function` 接收一个`Lambda`表达式
- 返回值:`Object`
- 函数说明:将集合进行循环转换
```javascript
var list = [1,2,3,4,5];
return list.map(e=>e+1); //返回[2,3,4,5,6]
```
## filter
- 入参:`function`:`Function` 接收一个`Lambda`表达式
- 返回值:`Object`
- 函数说明:将集合进行过滤
```javascript
var list = [1,2,3,4,5];
return list.filter(e=>e>3); //返回[4,5]
return list.filter((item,index)=>index>1); //返回[3,4,5]
```
## each
- 入参:`function`:`Function` 接收一个`Lambda`表达式
- 返回值:`Object`
- 函数说明:循环处理
```javascript
var list = [{name : '小明'},{name : '小花'}];
return list.each(item=>item.put('age',18)); //循环添加age属性
```
## sort
- 入参:`function`:`Function` 接收一个`Lambda`表达式
- 返回值:`Object`
- 函数说明:对集合进行排序
```javascript
var list = [1,5,2,3,6];
return list.sort((a,b)=>a-b);
```
## first
- 返回值:`Object`
- 函数说明:返回集合的第一项,集合为空时返回`null`
```javascript
var list = [1,2,3,4,5]
return list.first(); // 1
```
## last
- 返回值:`Object`
- 函数说明:返回集合的最后一项,集合为空时返回`null`
```javascript
var list = [1,2,3,4,5]
return list.last(); // 5
```
## reserve
- 返回值:`Object`
- 函数说明:对集合进行反转操作
```javascript
var list = [1,5,2,3,6];
return list.reserve();
```
## join(拼接)
- 入参:`separator` : `String` 分隔符
- 返回值:`String`
- 函数说明:对集合进行拼接操作
```javascript
var list = [1,5,2,3,6];
return list.join('-'); // 1-5-2-3-6
```
## shuffle
- 返回值:`Object`
- 函数说明:对集合进行打乱处理
```javascript
var list = [1,5,2,3,6];
return list.shuffle();
```
## max
- 返回值:`Object`
- 函数说明取出集合最大值如果找不到返回null
```javascript
var list = [1,6,8,9,18,12];
return list.max(); // 18
```
## min
- 返回值:`Object`
- 函数说明取出集合最小值如果找不到返回null
```javascript
var list = [6,1,8,9,18,12];
return list.min(); // 1
```
## sum
- 返回值:`Object`
- 函数说明累加求和计算不出返回0.0
```javascript
var list = [1,2,3,4];
return list.sum(); // 10
```
## avg
- 返回值:`Object`
- 函数说明计算平均值计算不出返回null
```javascript
var list = [1,2,3,4];
return list.avg(); // 2.5
```
## group
- 入参:`condition` : `Function` 分组条件
- 入参:`mapping` : `Function` 结果映射(省略时不做映射返回List)
- 返回值:`Map<Object, List<Object>>`或`Map<Object, Object>`
- 函数说明:分组
```javascript
var result = [
{ xxx : 1, yyy : 2, value : 11},
{ xxx : 1, yyy : 2, value : 22},
{ xxx : 2, yyy : 2, value : 33}
];
return result.group(item=>item.xxx + '_' + item.yyy)
// 结果:{"1_2": [{...}, {...}], "2_2": [{...}]}
```
## join(关联)
- 入参:`target` : `Object` 关联的集合
- 入参:`condition` : `Function` 关联条件
- 入参:`mapping` : `Function` 结果映射
- 返回值:`List<Object>`
- 函数说明:将两个集合关联起来
```javascript
var year2019 = [
{ "pt":2019, "item_code":"code_1", "sum_price":2234 },
{ "pt":2019, "item_code":"code_2", "sum_price":234 }
];
var year2018 = [
{ "pt":2018, "item_code":"code_1", "sum_price":1234.0 }
];
return year2019.join(year2018, (left, right) => left.item_code == right.item_code, (left, right) => {
'年份' : left.pt,
'编号' : left.item_code,
'今年' : left.sum_price,
'去年' : right == null ? 'unknow' : right.sum_price
});
```
## asBean(转为Java对象)
- 入参:`target` : `Class<?>` 目标类型
- 返回值:`List<?>`
- 函数说明:将`List<Object>` 转为目标`List`
```javascript
import 'org.ssssssss.script.functions.User' as User;
var userList = [{
age : 18,
weight : 121,
money : 123456789L,
name : '法外狂徒'
}]
return userList.asBean(User.class);
```
## every
- 入参:`condition` : `Function` 判断条件
- 返回值:`boolean`
- 函数说明:判断集合是否都符合条件
```javascript
var vals = [1, 2, 3, 4, 5, 6, 7];
return vals.every(e => e > 0); // true
```
## some
- 入参:`condition` : `Function` 判断条件
- 返回值:`boolean`
- 函数说明:判断集合是否有符合条件的
```javascript
var vals = [1, 2, 3, 4, 5, 6, 7];
return vals.some(e => e == 0); // false
```
## reduce
- 入参:`function` : `Function` 计算函数
- 返回值:`Object`
- 函数说明:循环集合通过给定的计算函数返回一个新值
```javascript
var vals = [1, 2, 3];
return vals.reduce((sum, val) => sum + val); // 6
```
## find
- 入参:`function``Function` 查找函数
- 返回值:`Object`
- 函数说明:循环集合查找符合条件的对象
```javascript
var list = [{name: 'A'}, {name:'B'}]
return list.find(it => it.name == 'A'); // {name: 'A'}
```
## findIndex
- 入参:`function``Function` 查找函数
- 返回值:`Object`
- 函数说明:循环集合查找符合条件的对象位置
```javascript
var list = [{name: 'A'}, {name: 'B'}]
return list.findIndex(it => it.name == 'A'); // 0
```
## concat
- 入参:`Object`,要连接的集合对象,可写多个
- 返回值:`Object`
- 函数说明:拼接一个或多个集合,返回新的集合
```javascript
var list = [1];
return [1].concat([2]); // [1,2] list不变
return [1].concat([2],[3, 4]); // [1, 2, 3, 4] list不变
```
## toMap
- 入参:`mappingKey``Function`key映射方法
- 入参:`mappingValue``Function`value映射方法可省略默认为本身
```javascript
var list = [
{id : 1, name: 'A'},
{id : 2, name: 'B'},
{id : 3, name: 'C'},
]
return list.toMap(k => k.id, v => v.name) // {1: 'A', 2: 'B', 3: 'C'}
```
## skip
- 入参:`value` : `int` 跳过的数量
- 返回值:`Object`
- 函数说明:跳过指定个数截取集合
```javascript
var vals = [1, 2, 3, 4];
return vals.skip(2); // [3, 4]
```
## limit
- 入参:`value` : `int` 限制的数量
- 返回值:`Object`
- 函数说明:取指定个数的集合
```javascript
var vals = [1, 2, 3, 4];
return vals.limit(3); // [1, 2, 3]
```
## findNotNull
- 返回值:`Object`
- 函数说明:找到第一个不为`null`的值
```javascript
var vals = [null, null, 3, null];
return vals.findNotNull(); // 3
```
## distinct
- 返回值:`Object`
- 函数说明:去掉重复元素
```javascript
var arr = [1, 2, 2, 3];
return arr.distinct(); // [1, 2, 3]
```
## distinct(func)
- 入参: 映射函数, 形如`e -> e.id`
- 返回值:`Object`
- 函数说明:根据函数返回值去重,去掉重复元素
```javascript
var arr = [{id: 1, name: "xiaodong"}, {id:1, name: "magic-api"}];
return arr.distinct(e => e.id); // [{id: 1, name: "xiaodong"}]
```