将数组与字符串进行比较(匹配字符串的一部分)
Compare arrays with strings (match parts of strings)
我正在处理 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;
}
有什么帮助吗?提前致谢。
您可以使用 filter, some and includes.
轻松实现此结果
var a = ["LFC_Luis Felipe Corullon", "FTP", "WWW"];
var b = ["SEMA", "LFC", "HTTP", "AVC"];
const result = [
...a,
...b.filter((str) => !a.some((s) => s.includes(str)))
];
console.log(result);
希望这段代码对您有所帮助
var a = ['LFC_Luis Felipe Corullon', 'FTP', 'WWW'];
var b = ['SEMA', 'LFC', 'HTTP', 'AVC'];
var result = [...a,...b.filter(o=>!a.some(v=>v.startsWith(o)))]
console.log(result)
找到方法了。谢谢大家
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;
var v = b;
for (var i=0; i<a.length; i++) {
for (var j=0; j<b.length; j++) {
if ( a[i].split("_")[0] == b[j] ) v.splice(j,1);
}
}
r = r.concat(v);
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);
我正在处理 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;
}
有什么帮助吗?提前致谢。
您可以使用 filter, some and includes.
轻松实现此结果var a = ["LFC_Luis Felipe Corullon", "FTP", "WWW"];
var b = ["SEMA", "LFC", "HTTP", "AVC"];
const result = [
...a,
...b.filter((str) => !a.some((s) => s.includes(str)))
];
console.log(result);
希望这段代码对您有所帮助
var a = ['LFC_Luis Felipe Corullon', 'FTP', 'WWW'];
var b = ['SEMA', 'LFC', 'HTTP', 'AVC'];
var result = [...a,...b.filter(o=>!a.some(v=>v.startsWith(o)))]
console.log(result)
找到方法了。谢谢大家
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;
var v = b;
for (var i=0; i<a.length; i++) {
for (var j=0; j<b.length; j++) {
if ( a[i].split("_")[0] == b[j] ) v.splice(j,1);
}
}
r = r.concat(v);
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);