首页 > 解决方案 > Angular(Javascript)如何使用地图和过滤器为可观察数组过滤日期时间并返回新的相似对象数组

问题描述

我从 http get 请求中获取一组数据。该数据如下: 在此处输入图像描述

如您所见,它是一个包含 4 个类似文档的数组,每个文档都有

{name:"...", series: [{name:"...",value:"..."},...]}

作为它的结构。现在,我想基于这个数组创建一个新数组,根据我从函数传递的一些日期时间参数(将是精确,来自日期时间选择器)。

filterDatetime(start, end, array) {
    this.actualData = array.map(el => el.series)
      .filter(dok => {new Date(dok.name) > new Date(start) && new Date(dok.name) < new Date(end)})
    }

我尝试应用上述函数来过滤开始和结束日期时间的系列数组,以返回与图片中类似的文档结构,只是使用新的过滤系列数组......但不知何故这不起作用。

此外,我正在使用 observables。我将返回的可观察数据保存在一个变量中,当页面加载时,该变量应该已经存在于图表中,因此,如果您使用 datetimepicker 选择日期范围,则该变量处的数据通常应该已经存在。

但是,我不确定如果它来自可观察对象(如果它已经存在),它将如何表现。所以也许我必须小心不要返回一个空数组左右(我对可观察对象还是新手,所以不知道这是否像那样工作)。

编辑:我可以向数据库发送一个新的 http 请求并直接对数据进行过滤,但我想学习那些 map/filter/reduce 等方法来直接使用当前数据进行操作,因为我认为这将是在后期开发阶段更方便。

标签: javascriptarraysdictionaryfilterobservable

解决方案


您可能应该在您现在进行 http GET 请求的地方进行过滤。

    private theSubject = new BehaviorSubject<>();
    this.data =     this.httpGetRequest()
                        .pipe(
                                filter(dok => {new Date(dok.name) > new Date(start) && new Date(dok.name) < new Date(end)}),
                                toArray()
                            )
                        .subscribe((dok: any) =>
                                    this.theSubject.next(dok),
                            );

推荐阅读