将数组与另一个数组进行比较,匹配所有元素(TypeScript、Angular Pipe)



我一直在思考Angular Pipe中的过滤问题。

多选组件包含元素的字符串数组,其中的选择充当AND运算。我想做的是返回至少与过滤器中的所有项目匹配的所有项目。

到目前为止,我已经为此使用了一些,这对非常有效,所以我认为每个都会对AND执行相同的操作,但在父过滤器中,它总是返回所有项,这意味着条件始终为真。

这是我的代码的简化摘录

let filterItems: string[] = ['1', '2', '3', '4', '5', '6'];
let filterSelection: string[] = ['2', '3'];
let item1: string[] = [];
let item2: string[] = ['2'];
let item3: string[] = ['2', '3'];
let item4: string[] = ['2', '3', '5', '6'];
console.log(item1.every(x => filterSelection.includes(x)));
console.log(item2.every(x => filterSelection.includes(x)));
console.log(item3.every(x => filterSelection.includes(x)));
console.log(item3.every(x => filterSelection.includes(x)));

预期结果是

第1项:虚假

第2项:虚假

第3项:true

第4项:true

只有当满足AND条件时,才应返回该项。我可能对这里的每一个的使用都不感兴趣,但我尝试了一些方法,比如切换数组,使用indexOf而不是include,使用一些,用filter否定一些,但都没有得到我想要的结果。

您根据需要交换了数组。

let filterItems: string[] = ['1', '2', '3', '4', '5', '6'];
let filterSelection: string[] = ['2', '3'];
let item1: string[] = [];
let item2: string[] = ['2'];
let item3: string[] = ['2', '3'];
let item4: string[] = ['2', '3', '5', '6'];
console.log(filterSelection.every(x => item1.includes(x)));
console.log(filterSelection.every(x => item2.includes(x)));
console.log(filterSelection.every(x => item3.includes(x)));
console.log(filterSelection.every(x => item4.includes(x)));

最新更新