代码块分享:实现多条件组合的记录排序

分享 代码块  收藏
1 / 528

案例:下图为表单结构,想要实现对现有数据,同一个“客户”,先按照“工厂交期”从早到晚排序,工厂交期相同的数据,按照“设计号”升序排序。
image.png
实现说明:

对现有数据进行排序重组,考虑通过自定义动作触发工作流的方式实现。(自定义动作目前已支持批量数据源)

按钮批量数据源可以作为数组传入代码块进行处理。(以下代码块通过 Chat-GPT 实现)

var arr1s = JSON.parse(input.arr1);

var arr2s = JSON.parse(input.arr2);

var arr3s = JSON.parse(input.arr3);

var arr4s = JSON.parse(input.arr4);


// 合并数组

var combinedArray = arr1s.map(function (_, i) {

return {

工厂交期: arr1s[i],

设计号: arr2s[i],

客户: arr3s[i], // 这里原本是 "客户: arr4s[i]," 修正为 "客户: arr3s[i],"

记录id: arr4s[i] // 添加一个新的属性,以示区分

};

});


// 按照“客户”进行分类

var groupedByCustomer = combinedArray.reduce(function (acc, obj) {

var key = obj.客户;

acc[key] = acc[key] || [];

acc[key].push(obj);

return acc;

}, {});


// 对每个分类进行排序

for (var customer in groupedByCustomer) {

if (groupedByCustomer.hasOwnProperty(customer)) {

groupedByCustomer[customer] = groupedByCustomer[customer]

.sort(function (a, b) {

// 先按照工厂交期降序排序

var dateA = new Date(a.工厂交期);

var dateB = new Date(b.工厂交期);

if (dateA > dateB) return -1;

if (dateA < dateB) return 1;


// 如果工厂交期相同,按照设计号升序排序

return a.设计号.localeCompare(b.设计号);

})

.map(function (obj, index) {

// 添加序号

obj.序号 = index + 1;

return obj;

});

}

}


output = groupedByCustomer;

使用:

input 对象:
image.png

测试数据:
image.png

输出:
image.png

按照排序顺序,输出内容会自动添加流水号,通过子流程逐条,按照记录 ID 查询记录,逐条将流水号更新到记录即可。