如何用MuleSoft DataWeave按匹配字段合并列表并分配递增iterid
基于did合并列表并生成递增iterid的解决方案
核心思路
先把attributes列表按did做分组映射,方便快速定位每个id项对应的匹配属性;再用一个全局计数器,每生成一个匹配对就递增加一,确保iterid连续唯一。
代码实现(以JavaScript为例)
// 示例输入 const ids = [{"id":"d3c0da07-e58f4606bm","did":"714c9836927d"}]; const attributes = [{"snm":"3298SJDJ","did":"714c9836927d"}]; // 1. 将attributes按did分组,减少重复查找开销 const attrMap = attributes.reduce((acc, attr) => { acc[attr.did] = acc[attr.did] || []; acc[attr.did].push(attr); return acc; }, {}); // 2. 生成带递增iterid的合并结果 let iterid = 0; const mergedResult = []; ids.forEach(idItem => { // 获取当前id项对应的所有匹配属性 const matchedAttrs = attrMap[idItem.did] || []; matchedAttrs.forEach(() => { iterid++; // 若需要合并attribute的属性,可改为 {...idItem, ...attr, iterid} mergedResult.push({ iterid, ...idItem }); }); }); console.log(mergedResult); // 输出:[{"iterid":1,"id":"d3c0da07-e58f4606bm","did":"714c9836927d"},{"iterid":2,"id":"d3c0da07-e58f4606bm","did":"714c9836927d"}]
关于flatMap的问题
flatMap的核心作用是数组扁平化转换,虽然也能实现需求,但需要额外在外部维护计数器,逻辑会绕一些,不如直接遍历的方式直观易懂,也更便于后续调整迭代规则。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

