角管改变原始对象

时间:2018-01-19 09:59:30

标签: angular angular-pipe

我有一个管道来过滤来自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>

2 个答案:

答案 0 :(得分:1)

您返回输入数据的副本,但这是毫无意义的,因为您之前为data.series分配了值。由于data是参考,您可以修改obj

答案 1 :(得分:0)

您可以添加-

const strObj = JSON.stringfy(obj);

let copyObj = JSON.parse(strObj);

我认为这是一个简单的解决方案,因为散布运算符和Object.assign不会影响对象内部。