我有一个管道来过滤来自userinput的日期范围的数组,过滤器在使数组变小时正常工作但是随后增加日期范围,管道再次使用小数组,这是过滤器的结果之前。
任何人都能解释一下我做错了什么吗?提前谢谢。
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'dateinrangePipe'
})
export class DateInRangePipe implements PipeTransform {
transform(obj: any[], from: Date, to: Date): any[] {
if (obj && from && to) {
console.log('before:');
obj.forEach(data => {
console.log(data.name);
data.series = data.series.filter((item: any) => {
return this.inRange(item.name, from, to);
});
});
}
console.log(obj);
return [...obj];
}
inRange(date: Date, from: Date, to: Date): boolean {
return date.getTime() >= from.getTime() &&
date.getTime() <= to.getTime() ? true : false;
}
}
编辑:
管道用于ngx-chart的数据
<ngx-charts-line-chart
...
[results]="multi | dateinrangePipe: from: to"
...>
</ngx-charts-line-chart>
答案 0 :(得分:1)
您返回输入数据的副本,但这是毫无意义的,因为您之前为data.series
分配了值。由于data
是参考,您可以修改obj
。
答案 1 :(得分:0)
您可以添加-
const strObj = JSON.stringfy(obj);
let copyObj = JSON.parse(strObj);
我认为这是一个简单的解决方案,因为散布运算符和Object.assign
不会影响对象内部。