使用typescript/javascript进行筛选
考虑一个数组A1使用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)>-
[“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))
。