Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/455.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 使用复选框筛选嵌套数组_Javascript_Arrays_Angular - Fatal编程技术网

Javascript 使用复选框筛选嵌套数组

Javascript 使用复选框筛选嵌套数组,javascript,arrays,angular,Javascript,Arrays,Angular,我正在从事一个项目,在这个项目中,我有一个训练列表和一个过滤器,可以根据标记的复选框查看特定的训练选择。到目前为止,由于解决了一项技术,一切都进展顺利。这种技术对于过滤单个项目非常有效,但是,当我在数组中嵌套项目时,它就不再有效了 目前,我有一个包含以下内容的训练模式: title, description, imagePath, type: string, duration, specialty, phase, zwo 我有使用Angular SelectionModel的复选框。这些复选框

我正在从事一个项目,在这个项目中,我有一个训练列表和一个过滤器,可以根据标记的复选框查看特定的训练选择。到目前为止,由于解决了一项技术,一切都进展顺利。这种技术对于过滤单个项目非常有效,但是,当我在数组中嵌套项目时,它就不再有效了

目前,我有一个包含以下内容的训练模式:

title,
description,
imagePath,
type: string,
duration,
specialty,
phase,
zwo
我有使用Angular SelectionModel的复选框。这些复选框用于筛选以下内容:
阶段
专业
类型
,使用上述链接中提供的筛选方法(该方法按预期工作):

我决定可能会有需要多个阶段的情况。为了做好准备,我在服务中创建了一个嵌套数组(可以在
功能/训练页面/workoutservice/workout.service
中找到)。此嵌套数组从训练模型中获取相同的项目,但阶段为嵌套数组除外:

 workouts: Workout[] = [
    new Workout(
      'title',
      `description...`,
      "..img",
      "type",
      duration,
      "specialty...",
      ["Base 1", "Testing"],
      true/false
    ),
请注意
[“Base 1”,“Testing”]
,因为这现在是一个嵌套数组

问题是,当我进行此更改时,过滤方法会中断。复选框过滤器工作的唯一方式是不选择任何阶段。如果我从上面转到
filterWorkouts()
,并在
返回中更改行:

。。。(phases.length==0 | | phases.indexOf(workout.phase)>=0)和&……

致:
。。。(phases.length==0 | | phases.indexOf(workout.phase[0])>=0)和&……

它再次工作,但当然只查找索引为0的数组

我试着在数组中循环并对照过滤器检查索引,但每次都会破坏我的应用程序

是否有一种方法可以根据数组中的每一项而不是一项筛选我的复选框?因此,如果训练的
阶段
[“Base 1”,“Race”]
我希望它显示在框中是否选中Base 1或Race

任何帮助都将不胜感激。我也很高兴澄清任何事情


(为便于使用而简化)。服务地点如上所述。
训练过滤器
训练列表
来自
训练页面
文件夹中的两个独立组件。

您可以使用如下条件:

!phases.length || phases.some(phase => workout.phase.includes(phase))

这样做的目的是首先检查
阶段
数组是否为空,如果为空,则检查
训练阶段
数组中是否存在任何元素。

您可以使用如下条件:

!phases.length || phases.some(phase => workout.phase.includes(phase))

这样做的目的是首先检查
阶段
数组是否为空,如果为空,则检查
训练阶段
数组中是否存在任何元素。

尝试:
!阶段。长度| |阶段。部分(阶段=>训练。阶段。包括(阶段))
。如果
阶段
为空或
训练,则此条件为
true
。阶段
包含其任何元素。我不确定这是否是你想要的逻辑。泰特斯,这是完美的,而且似乎效果很好。非常感谢你!!如果你愿意的话,请随意将此作为答案,这样我就可以接受,这样你就可以获得声誉。再次感谢你,我真的很感激你这么说:
!阶段。长度| |阶段。部分(阶段=>训练。阶段。包括(阶段))
。如果
阶段
为空或
训练,则此条件为
true
。阶段
包含其任何元素。我不确定这是否是你想要的逻辑。泰特斯,这是完美的,而且似乎效果很好。非常感谢你!!如果你愿意的话,请随意将此作为答案,这样我就可以接受,这样你就可以获得声誉。再次感谢,我真的很感激