Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.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
使用typescript/javascript进行筛选_Javascript_Typescript - Fatal编程技术网

使用typescript/javascript进行筛选

使用typescript/javascript进行筛选,javascript,typescript,Javascript,Typescript,考虑一个数组A1[“text”,“test”]和另一个数组A2[“onetest”,“two”,“threetext”,“fourtext”] 我需要将结果作为[“onetest”、“threetext”、“fourtext”] 这就是我现在拥有的 A2.filter(r => r !== null && A1.indexOf(r) > -1); 这是返回的空列表。我该如何解决这个问题 r是一个字符串,因此r.text既不必要也不正确 A1.indexOf(r)>-

考虑一个数组A1
[“text”,“test”]
和另一个数组A2
[“onetest”,“two”,“threetext”,“fourtext”]

我需要将结果作为
[“onetest”、“threetext”、“fourtext”]

这就是我现在拥有的

A2.filter(r => r !== null && A1.indexOf(r) > -1);
这是返回的空列表。我该如何解决这个问题

  • r
    是一个字符串,因此
    r.text
    既不必要也不正确
  • A1.indexOf(r)>-1
    检查字符串
    r
    是否包含在数组
    A1
    中。您的任何项目都不是这样
  • 不要使用
    r.text
    ,只需使用
    r
    。要确定字符串
    r
    是否包含
    A1
    中的任何子字符串,可以使用和:

    常量A1=[“文本”,“测试”]; 常数A2=[“一个测试”、“两个”、“三个文本”、“四个文本”]; const result=A2.filter(r=>r!==null&&A1.some(a=>r.includes(a));
    控制台日志(结果)您可以通过检查模式字符串的每个值进行筛选

    var a1=[“文本”,“测试”],
    a2=[“一个测试”、“两个”、“三个文本”、“四个文本”],
    结果=a2.过滤器(s=>a1.一些(p=>s.包括(p));
    
    控制台日志(结果)
    我看到两个问题:首先,
    A2
    的元素没有名为
    text
    的属性,因此
    r.text
    未定义的
    ,您可能只想使用
    r

    其次,
    A1.indexOf
    不是您想要的
    indexOf
    既是一个数组方法又是一个字符串方法,我想你把它们搞混了。数组方法用于查找精确匹配的索引,而字符串方法可用于查找子字符串的位置。您需要确定
    A1
    的任何成员是否作为子字符串存在于
    A2
    的给定成员中。我建议使用
    Array.prototype.some
    方法,它确定给定谓词对于数组的任何成员是否为真。在此范围内,我们可以使用string方法
    indexOf
    创建谓词

    看看这是否适合您:

    常量A1=[“文本”,“测试”] 常数A2=[“一个测试”、“两个”、“三个文本”、“四个文本”] //我需要得到的结果是[“onetest”、“threetext”、“fourtext”] log(A2.filter(r=>r!==null&&A1.some(s=>r.indexOf(s)>-1))
    A1.indexOf(r)
    仅检查数组的元素是否与给定文本完全匹配,而不是这样,您正在搜索子字符串

    试试这个:

    var a1=[“文本”,“测试”];
    变量a2=[“一个测试”、“两个”、“三个文本”、“四个文本”];
    var filtered=a2.filter(e=>a1.some(e2=>e.indexOf(e2)!=-1));
    
    console.log(过滤)以及为什么(例如,
    “onetest”
    应该是
    A1
    的一部分?
    A1
    的元素必须是
    r
    的一部分。
    A1
    A2
    之间没有任何共同之处。除非你想按子字符串过滤?是的,我想按子字符串过滤你可能想阅读的答案这回答了你的问题吗?非常感谢。如果A1:object[]={[id:1,名称:“text”],[id:2,名称:“test”]}和另一个数组A2[“onetest”,“two”,“threetext”,“fourtext”]并返回结果[“onetest”,“threetext”,“fourtext”]?谢谢!如果A1:object[]={[id:1,名称:“text”],[id:2,名称:“test”]}和另一个数组A2[“onetest”,“two”,“threetext”,“fourtext”]并返回结果[“onetest”,“threetext”,“fourtext”]?谢谢!如果A1:object[]={[id:1,name:“text”],[id:2,name:“test”]}和另一个数组A2[“onetest”,“two”,“threetext”,“fourtext”]并返回结果[“onetest”,“threetext”,“fourtext”]?然后采用
    A2.filter(({name})=>A1.some(p=>name.includes(p))