javascript - 将数组与字符串进行比较(匹配字符串的一部分)
问题描述
我正在处理一个 InDesign 脚本,需要将两个数组与返回一个新数组的字符串进行比较,该数组包含与 A 元素不匹配的 A + B 元素。
例如:
var a = ['LFC_Luis Felipe Corullon', 'FTP', 'WWW'];
var b = ['SEMA', 'LFC', 'HTTP', 'AVC'];
我需要这样的结果:
['LFC_Luis Felipe Corullon', 'FTP', 'WWW', 'SEMA', 'HTTP', 'AVC']
排除“LFC”,因为它与“LFC_Luis Felipe Corullon”匹配。
我试过这个,但它永远循环......
var a = ["LFC_Luis Felipe Corullón" , "FTP" , "FMTP"];
var b = ["LFC" , "FDOT" , "SAS" , "ADA" , "SAE"];
//========================================================================================
alert(merge(a,b));
function merge(a,b) {
var r = a;
for (var i=0; i<a.length; i++) {
var v = [];
for (var j=0; j<b.length; j++) {
if ( a[i].split("_")[0] == b[j] ) v.push(true);
else v.push(false);
}
for (k in v) {
if (v[k]==false) r.push(b[k]);
}
}
return r;
}
有什么帮助吗?提前致谢。
解决方案
我习惯这样做:
var a = ['LFC_Luis Felipe Corullon', 'FTP', 'WWW'];
var b = ['SEMA', 'LFC', 'HTTP', 'AVC'];
var a_str = a.join('\t'); // convert the array into a string
for (var i in b) if (a_str.indexOf(b[i])<0) a.push(b[i]);
console.log(a); // or alert(a);
如果您不关心性能,它甚至可以是单线:
var a = ['LFC_Luis Felipe Corullon', 'FTP', 'WWW'];
var b = ['SEMA', 'LFC', 'HTTP', 'AVC'];
for (var i in b) if (a.join('\t').indexOf(b[i])<0) a.push(b[i]);
console.log(a);
顺便说一下,第二种解决方案从结果数组中消除重复值:
var a = ['LFC_Luis Felipe Corullon', 'FTP', 'WWW'];
var b = ['LFC', 'AVC', 'AVC', 'AVC']; // <-- duplicates
结果:
[ 'LFC_Luis Felipe Corullon', 'FTP', 'WWW', 'AVC' ] // <-- no duplicates
如果您想使用 RegExp 查找匹配项,可以通过以下方式完成:
var a = ['LFC_Luis Felipe Corullon', 'FTP', 'WWW'];
var b = ['SEMA', 'LFC', 'ftp', 'HTTP', 'AVC'];
var a_str = a.join('\t'); // convert the array into a string
for (var i in b) {
var reg = new RegExp(b[i], 'i'); // 'i' to ingore case for example
if (!a_str.match(reg)) a.push(b[i]);
}
console.log(a);
推荐阅读
- android - ImageView src 未在 xml 中显示
- mobile - 为什么颤振小部件是不可变的?
- entity-framework-core - ef core 2.x - n:m 关系,其中 m 不同类型
- docusignapi - 如何从模板中提取项目(在 eSignature Api 中)
- java - spring缓存如何定义前缀?
- python - Keras 嵌入层导致维度问题
- kubernetes - 来自服务器的错误(ServiceUnavailable):服务器当前无法处理请求(获取nodes.metrics.k8s.io)
- angularjs - ng-repeat 中数据的输入范围过滤器
- javascript - 使用 Makefile 构建具有新更改的 slick
- angular - 将“内容投影”传递给递归 NGTemplateOutlet 组件?