将数组与字符串进行比较(匹配字符串的一部分)

路易斯·费利佩·科鲁隆

我正在处理一个 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章