InDesign脚本开发:按字符串部分匹配规则实现数组合并去重
InDesign 数组合并问题解决方案
原代码问题分析
- 首先
var r = a是引用赋值,直接指向原a数组,循环中不断往r里push元素会导致a的长度持续增长,外层for (var i=0; i<a.length; i++)的终止条件永远无法满足,最终出现死循环 - 逻辑错误:每遍历一个a数组元素就把b数组中不匹配当前元素的项全部加入结果,会导致b数组元素被重复添加多次
正确实现代码
var a = ["LFC_Luis Felipe Corullón" , "FTP" , "FMTP"]; var b = ["LFC" , "FDOT" , "SAS" , "ADA" , "SAE"]; alert(merge(a,b)); function merge(a, b) { // 拷贝a数组所有元素到结果数组,避免修改原数组 var result = a.slice(); // 提取a数组所有元素的下划线前缀存入哈希表,提升匹配效率 var prefixMap = {}; for (var i = 0; i < a.length; i++) { var prefix = a[i].split("_")[0]; prefixMap[prefix] = true; } // 遍历b数组,过滤掉匹配到前缀的元素后加入结果 for (var j = 0; j < b.length; j++) { var currentB = b[j]; if (!prefixMap[currentB]) { result.push(currentB); } } return result; }
效果验证
针对你的示例输入:
var a = ['LFC_Luis Felipe Corullon', 'FTP', 'WWW']; var b = ['SEMA', 'LFC', 'HTTP', 'AVC'];
运行代码后返回结果为['LFC_Luis Felipe Corullon', 'FTP', 'WWW', 'SEMA', 'HTTP', 'AVC'],完全符合需求。
内容的提问来源于stack exchange,提问作者Luis Felipe Corullón
相关产品推荐
相关产品推荐

