Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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
Arrays 带数组的typescript筛选器数组_Arrays_Typescript - Fatal编程技术网

Arrays 带数组的typescript筛选器数组

Arrays 带数组的typescript筛选器数组,arrays,typescript,Arrays,Typescript,在这里打断我的头。。。。 我想用另一个数组过滤一个数组 在用例中,我有一个数组,可以使用动态复选框过滤该数组 到目前为止,我已经提出了以下代码: var filteredList = this.arrayList.filter(function(e){ return activeCheckbuttons.filter(function(e2){ return e2.Description != e.Description

在这里打断我的头。。。。 我想用另一个数组过滤一个数组

在用例中,我有一个数组,可以使用动态复选框过滤该数组

到目前为止,我已经提出了以下代码:

var filteredList = this.arrayList.filter(function(e){
           return activeCheckbuttons.filter(function(e2){
               return e2.Description != e.Description
           }).length == 0;
})
上面的代码在只单击一个复选框时有效,但在单击两个复选框时无效

有人吗


谢谢,

我想,对于
数组列表中的每个项目,您需要检查
activeCheckbuttons
中是否有相同描述的项目。如果有,我们将该项添加到结果中,但如果没有,我们将忽略它们:

const filteredList = this.arrayList.filter(item1 => 
     !!activeCheckbuttons.find(item2 => item1.Description === item2.Description)
);
现在,看看这段代码的工作原理:

  • 使用
    filter
    检查数组中的每个元素。如果该项的谓词返回
    true
    ,则返回elment。不是,它被跳过
  • 在谓词内部,我们使用
    find
    方法确定要检查的项是否存在于
    activeCheckbuttons
    数组中(比较它们的描述)
    find
    返回与条件匹配的第一个元素,因此,如果找到一个,则该项的谓词为
    true
    。如果没有找到任何,则返回
    null
    ,即
    false
    ,并且该项不会出现在过滤后的数组中
您将看到我也在使用
操作员。此运算符仅应用了
逻辑not
运算符两次。为什么?正如将对象强制转换为值
true
和将
null
强制转换为false一样:

  • !!{}
    ->
    !(!{})
    ->
    !(假)
    ->
    true
  • !!空
    ->
    !(!null)
    ->
    !(真)
    ->
这并不是必须的,但我确实喜欢这样做,以便在代码中明确我想要返回
true
false
而不是objects或null

如我在评论中所述,代码中的问题是过滤第二个数组,删除所有与正在检查的项描述不同的元素。当然,如果有多个元素,我想它们是不同的,因此
filter
函数返回至少一个元素,main
filter
返回
false
,结果数组为空


如果这不完全是您需要过滤的方式,请告诉我,我将相应地修改代码

我认为,对于
arrayList
中的每个项目,您需要检查
activeCheckbuttons
中是否有具有相同描述的项目。如果有,我们将该项添加到结果中,但如果没有,我们将忽略它们:

const filteredList = this.arrayList.filter(item1 => 
     !!activeCheckbuttons.find(item2 => item1.Description === item2.Description)
);
现在,看看这段代码的工作原理:

  • 使用
    filter
    检查数组中的每个元素。如果该项的谓词返回
    true
    ,则返回elment。不是,它被跳过
  • 在谓词内部,我们使用
    find
    方法确定要检查的项是否存在于
    activeCheckbuttons
    数组中(比较它们的描述)
    find
    返回与条件匹配的第一个元素,因此,如果找到一个,则该项的谓词为
    true
    。如果没有找到任何,则返回
    null
    ,即
    false
    ,并且该项不会出现在过滤后的数组中
您将看到我也在使用
操作员。此运算符仅应用了
逻辑not
运算符两次。为什么?正如将对象强制转换为值
true
和将
null
强制转换为false一样:

  • !!{}
    ->
    !(!{})
    ->
    !(假)
    ->
    true
  • !!空
    ->
    !(!null)
    ->
    !(真)
    ->
这并不是必须的,但我确实喜欢这样做,以便在代码中明确我想要返回
true
false
而不是objects或null

如我在评论中所述,代码中的问题是过滤第二个数组,删除所有与正在检查的项描述不同的元素。当然,如果有多个元素,我想它们是不同的,因此
filter
函数返回至少一个元素,main
filter
返回
false
,结果数组为空


如果这不完全是您需要进行筛选的方式,请告诉我,我将相应地修改代码

,因此,为了澄清,您希望筛选
arrayList
,并仅返回那些
说明
activeCheckbuttons
中的任何项目匹配的项目。或者你只想得到那些与任何一个都不匹配的元素?仔细阅读,你要做的是过滤所有描述与activeCheckbuttons中的所有项不相同的元素,因此,当然,如果数组中有两个项,除非它们是相同的项或具有相同的描述,您将不会得到任何结果。因此,为了澄清这一点,您需要筛选
arrayList
,并仅返回那些
Description
activeCheckbuttons
中的任何项目相匹配的项目。或者你只想得到那些与任何一个都不匹配的元素?仔细阅读,你要做的是过滤所有描述与activeCheckbuttons中的所有项不相同的元素,因此,当然,如果数组中有两个项,除非它们是相同的项或具有相同的描述,你最终不会有结果的。你好,奥斯卡,谢谢你帮我。我不确定我是否正确理解了你的答案,例如:想象一张名单,上面有三种不同性别的人:(m)ale,(F)emale和(U)nkown。所以我也有3个复选框,当选择M和F时,我想从中过滤掉所有的男性和女性