Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 比较/筛选数组B包含A的任何子字符串的两个数组_Javascript_Typescript - Fatal编程技术网

Javascript 比较/筛选数组B包含A的任何子字符串的两个数组

Javascript 比较/筛选数组B包含A的任何子字符串的两个数组,javascript,typescript,Javascript,Typescript,好的,这是我部分工作的内容(忽略区分大小写),比较如下: arrayA = ["apples", "Oranges", "salt", "Cracked Black Pepper"]; arrayB = ["salt", "pepper", "orange"] findAnyMatch(arrayA, arrayB): string[] { let returnArray = []; let conditionedArrayA = arrayA.map(i => i.to

好的,这是我部分工作的内容(忽略区分大小写),比较如下:

arrayA = ["apples", "Oranges", "salt", "Cracked Black Pepper"];
arrayB = ["salt", "pepper", "orange"]
findAnyMatch(arrayA, arrayB): string[] {
    let returnArray = [];
    let conditionedArrayA = arrayA.map(i => i.toLowerCase().trim())
    for (let i = 0; i < arrayB.length; i++) {
      if (conditionedArrayA .includes(arrayB[i].toLowerCase().trim())) {
        ret.push(arrayB[i].toLowerCase().trim());
      }
    }
    return returnArray;
  }
其“部分”作用于以下各项:

arrayA = ["apples", "Oranges", "salt", "Cracked Black Pepper"];
arrayB = ["salt", "pepper", "orange"]
findAnyMatch(arrayA, arrayB): string[] {
    let returnArray = [];
    let conditionedArrayA = arrayA.map(i => i.toLowerCase().trim())
    for (let i = 0; i < arrayB.length; i++) {
      if (conditionedArrayA .includes(arrayB[i].toLowerCase().trim())) {
        ret.push(arrayB[i].toLowerCase().trim());
      }
    }
    return returnArray;
  }
findAnyMatch(arrayA,arrayB):字符串[]{
让returnArray=[];
设conditionedArrayA=arrayA.map(i=>i.toLowerCase().trim())
for(设i=0;i
它返回:
“盐”,“橙”
非常高兴;问题是它在arrayA中看不到“胡椒”,因为它前面有“裂黑”

我如何让它在条件数组的每个字符串中的任何位置进行搜索


谢谢

您可以使用过滤器和一些。用正则表达式

  • 过滤器仅用于获取所需的值
  • 一些用于检查
    arrayA
    中的任何值是否与当前元素匹配
  • 正则表达式用于匹配字符串<代码>i标志用于区分大小写
让arrayA=[“苹果”、“橙子”、“盐”、“碎黑胡椒”];
让arrayB=[“盐”、“胡椒”、“橘子”]
让find=(A,B)=>{
返回B.filter(B=>A.some(A=>newregexp(B,'i').test(A)))
}

console.log(find(arrayA,arrayB))
因为
arrayB
包含“针”,而
arrayA
包含“干草堆”,所以可以使用。注意您在尝试中实际使用了,这就是为什么它只匹配
“salt”
(根据您的示例代码,我非常怀疑
“orange”
是否匹配成功)

下面是一个使用
String.prototype.includes()
的解决方案:

功能匹配子串(草堆、针){
回针。过滤器(功能(针){
const lowercasenedle=needle.toLowerCase()
返回this.some(haystack=>haystack.includes(小写字母edle))
},haystacks.map(haystack=>haystack.toLowerCase())
}
const arrayA=[“苹果”、“橙子”、“盐”、“碎黑胡椒”]
常量arrayB=[“盐”、“胡椒”、“橙”]

log(matchedsubstring(arrayA,arrayB))
您的问题标题和您身体中的问题描述不一致。“Cracked Black Pepper”不是“Pepper”的子串,但忽略大小写敏感性,“Pepper”是“Cracked Black Pepper”的子串。你的问题是“过滤两个数组,其中数组B包含A的任何子字符串”吗?好的,只是一个旁注,请确保数组不是以任何方式来自用户输入的字符串。如果是,请在将字符串传递给构造函数之前使用转义字符串,否则最终会出现漏洞。