我正在处理一个 InDesign 脚本,需要将两个数组与字符串进行比较,返回一个新数组,其中 A + B 元素与 A 元素不匹配。
例如:
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);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句