【问题标题】:Filter array of years based on persons age根据人的年龄过滤年份数组
【发布时间】:2021-12-07 15:50:50
【问题描述】:

在我的项目中,我有一个年龄数组,我想根据人的年龄进行过滤,最大年龄是 65 岁,例如,如果一个人在 years 数组中是 61 岁,则只有3和4。 我怎样才能做到这一点? 这是我的stackblitz

.html

      <input
        matInput
        formControlName="birthDate"
        type="text"
        class="form-control age"
        placeholder="ex: 25"
        required/>

 <carousel
    #myCarousel
    height="100%"
    width="120"
    cellsToShow="1"
    overflowCellsLimit="3"
    id="age" >
    <div class="carousel-cell" *ngFor="let year of years">
      {{ year.year }}Years
    </div>
  </carousel>

.ts

  years = [
    {
      year: 3,
      value: 3,
    },
    {
      year: 4,
      value: 4,
    },
  
  ];

  next() {
    this.personAge = (this.formGroup.get('formArray') as FormArray)
      .at(0)
      .get('birthDate').value;
    console.log(this.personAge);
    this.period = this.myCarousel.slideCounter + 3;
    console.log(this.period);
  }

【问题讨论】:

  • 对不起 - 3 和 4 与 61 岁有什么关系...?
  • 哦对不起解释不好,我的意思是如果项目的最大年龄是 65 岁,而人是 61 岁,他不能选择 5 年,bcuz 61 + 5 = 66,所以他可以选择 3 年和4 年。我解释得好吗? :D

标签: angular typescript


【解决方案1】:

您可以使用filter 函数来过滤数据。

类似的东西应该可以工作:

const years = [{year: 3, value: 3}, {year: 4, value: 4}, {year: 5, value: 5}, {year: 6, value: 6}, {year: 7, value: 7}];
const age = 60;
const result = years.filter(year => year.value + age <= 65); 
// result: [{year: 3, value: 3}, {year: 4, value: 4}, {year: 5, value: 5}]

如果您想直接在模板上执行此操作,可以使用pipe 对其进行过滤。

更新:

你的管道代码几乎是正确的,你错过了两件事。

  • 由于管道有多个输入,您需要在第一个之后指定输入。 How do I call an Angular 2 pipe with multiple arguments?
  • 我在示例中使用了 const age,因为它就是这样。您应该使用 this.age 作为对组件变量的引用,而不是函数变量,以便将其发送到管道。

这是管道的编码方式:

age-filter.pipe.ts

@Pipe({
  name: 'ageFilter',
})
export class AgeFilterPipe implements PipeTransform {
  transform(
    years: { year: number; value: number }[],
    age: number
  ): { year: number; value: number }[] {
    return years.filter((year) => year.value + age <= 65);
  }
}

component.html

<div class="carousel-cell" *ngFor="let year of years | ageFilter: age">
    {{ year.year }}Years
</div>

另外,对于以后的问题,请记住:How much research effort is expected of stack overflow。发布新问题应该是您最后的手段。

【讨论】:

  • 您好,谢谢您的回答,很抱歉我的问题,我是新手!另外,我正在尝试使用管道在我的 html 中执行过滤数据,但它不起作用,我做错了什么?我更新了我的堆栈闪电战
  • 嗨@GaathyniusAelin,别担心,在发布未来的问题之前考虑一下。我用如何实现管道编辑了答案,你几乎明白了,你错过了两件事。检查答案,如果我需要进一步改进,请告诉我。
  • 嘿,再次感谢你。更新了 stackblitz,我在我的代码中实现了你的管道,它与 div 完美配合,但在我的轮播中它不显示数据,是因为我正在使用轮播吗?
  • @GalathyniusAelin 似乎轮播在动态数据更改方面存在一些问题,因此问题在于组件而不是过滤方法。我查看了他们的GitHub 并找到了this answer。似乎每次数据更改时您都需要刷新/重新渲染组件。
  • 再次感谢您!我会尝试重新渲染!
猜你喜欢
  • 1970-01-01
  • 2018-11-23
  • 1970-01-01
  • 1970-01-01
  • 2019-01-31
  • 1970-01-01
  • 2019-12-12
  • 1970-01-01
  • 2015-05-22
相关资源
最近更新 更多