iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > html >JavaScript中如何对大量数据的多重过滤
  • 865
分享到

JavaScript中如何对大量数据的多重过滤

2024-04-02 19:04:59 865人浏览 八月长安
摘要

本篇文章为大家展示了javascript中如何对大量数据的多重过滤,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。所有代码使用 ES2015 语法,需要 ES5 语法

本篇文章为大家展示了javascript中如何对大量数据的多重过滤,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

所有代码使用 ES2015 语法,需要 ES5 语法的可以用 Babel - Try it out 或者 typescript Playground  翻译

问题提出

今天有朋友问我一个问题,前端通过 ajax后端取得了大量的数据,需要根据一些条件过滤,过滤的方法是这样的:

class Filter {     filterA(s) {         let data = this.filterData || this.data;         this.filterData = data.filter(m => m.a === s);     }          filterB(s) {         let data = this.filterData || this.data;         this.filterData = data.filter(m => m.b === s);     } }

现在迷糊了,觉得这样处理数据不对,但是又不知道该怎么处理。

发现问题

问题就在过滤上,这样固然可以实现多重过滤(先调用 filterA() 再调用 filterB()  就可以实现),但是这个过滤是不可逆的。假如过滤过程是这样:

f.filterA("a1"); f.filterB("b1"); f.filterA("a2");

本来是希望按 "a1" 和 "b1" 过滤了数据之后,再修改***个条件为 "a2",但结果却成了空集。

解决问题

发现了问题,就针对性的解决。这个问题既然是因为过滤过程不可逆造成的,那每次都直接从 this.data 开始过滤,而不是从this.filterData  开始过滤,就能解决问题。如果要这样做,就需要将选择的过滤条件先记录下来。

记录过滤条件

用一个列表记录过滤条件当然是可行的,但是注意对同一个条件的两次过滤是互斥的,只能保留***一个,所以应该用 HashMap 更为合适。

class Filter {     constructor() {         this.filters = {};     }      set(key, filter) {         this.filters[key] = filter;     }      getFilters() {         return Object.keys(this.filters).map(key => this.filters[key]);     } }

这种情况下,像上面的过程表示为

f.set("A", m => m.a === "a1"); f.set("B", m => m.b === "b1"); f.set("A", m => m.a === "a1"); let filters = f.getFilters(); // length === 2;

上面第 3 句设置的 filter 覆盖了第 1 句设置的那个。现在再用***取得的 filters 依次来过滤原数据  this.data,就能得到正确的结果。

有人会觉得 getFilters() 返回的列表不是按 set 的顺序的——的确,这是 HashMap  的特点,无序。不过对于简单条件的判断,不管谁先谁后,结果是一样的。但是对于一些复合条件判断,就可能会有影响。

确实需要的话,可以通过 array 代替 map 来解决一下顺序的问题,但这样查找效率会降低(线性查找)。如果还想解决查找效率的问题,可以用 array  + map 来处理。这里就不多说了。

过滤

实际上在使用的时候,每次都 getFilter() 再用一个循环来处理确实比较慢。既然 data 都封装成 Filter  中,可以考虑直接给一个filter() 方法来送货过滤接口。

class Filter {     filter() {         let data = this.data;         for (let f of this.getFilters()) {             data = data.filter(f);         }         return data;     } }

不过这样我觉得效率不太好,尤其是对大量数据的时候。不妨利用一下 lodash 的延迟处理过程。

利用 lodash 的延迟处理

filter() {     let chain = _(this.data);     for (let f of this.getFilters()) {         chain = chain.filter(f);     }     return chain.value(); }

lodash 在数据大于 200 的时候会启用延迟处理过程,也就是说,它会处理成一个循环中依次调用每一个 filter,而不是对每一个 filter  进行一次循环。

延迟处理和非延迟处理通过下图可以看出来区别。非延迟处理总共会进行 n(这里 n = 3) 次大循环,产生 n - 1  个中间结果。而延迟处理只会进行一次大循环,没有中间结果产生。

JavaScript中如何对大量数据的多重过滤

不过说实在的,我不太喜欢为了一点小事多加载一个库,所以干脆自己做个简单的实现

自己实现延迟处理

filter() {     const filters = this.getFilters();     return data.filter(m => {         for (let f of filters) {             // 如果某个 filter 已经把它过滤掉了,也不用再用后面的 filter 来判断了             if (!f(m)) {                 return false;             }         }         return true;     }); }

里面的 for 循环还可以用 Array.prototype.every 来简化:

filter() {     const filters = this.getFilters();     return data.filter(m => {         return filters.every(f => f(m));     }); }

数据过滤其实并不是多复杂的事情,只要把思路理清楚,搞明白什么数据是需要保留的,什么数据是临时(中间过程)的,什么数据是最终结果。利用  Array.prototype 中的相关方法,或者诸如 lodash 之类的工具,很容易就处理出来了。

上述内容就是JavaScript中如何对大量数据的多重过滤,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网html频道。

--结束END--

本文标题: JavaScript中如何对大量数据的多重过滤

本文链接: https://www.lsjlt.com/news/86120.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JavaScript中如何对大量数据的多重过滤
    本篇文章为大家展示了JavaScript中如何对大量数据的多重过滤,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。所有代码使用 ES2015 语法,需要 ES5 语法...
    99+
    2022-10-19
  • 关于MySQL 大批量插入时如何过滤掉重复数据
    目录一、发现问题二、删除全部重复数据,一条不留三、删除表中删除重复数据,仅保留一条四、开始删除重复数据,仅留一条前言: 加班原因是上线,解决线上数据库存在重复数据的问题,发现了程序的...
    99+
    2022-11-12
  • Python 大数据重定向:如何应对海量数据?
    随着互联网的飞速发展,我们所面对的数据量也日益增大,如何高效地处理海量数据成为了数据科学和工程领域的一个重要问题。Python 作为一种高级编程语言,具有强大的数据处理和分析能力,成为了处理大数据的首选语言之一。但是,当数据量超过了 Py...
    99+
    2023-10-18
    大数据 重定向 load
  • python中数据量过大如何处理
    在Python中处理大数据量的方法包括:1. 逐行处理:读取大型文件时,可以逐行读取并处理每一行数据,而不是一次性将整个文件加载到内...
    99+
    2023-09-14
    python
  • perl如何过滤文件中的数据
    在Perl中,可以使用正则表达式或者内置的字符串函数来过滤文件中的数据。以下是两种常见的方法:1. 使用正则表达式过滤数据:```p...
    99+
    2023-10-07
    perl
  • 容器中的 ASP 重定向:如何应对大数据?
    ASP是一种广泛应用的Web开发技术,它的重定向功能在应用程序中起着至关重要的作用。随着互联网技术的不断发展,数据量的增大,如何有效处理大数据成为了开发者所关注的重要问题。在容器中使用ASP重定向,也需要考虑如何应对大数据的问题。 一、AS...
    99+
    2023-11-12
    重定向 大数据 容器
  • java8如何根据list对象中的属性过滤筛选
    目录根据list对象中的属性过滤筛选根据性别筛选出所有的女同学list根据对象某个字段或多个字段去重、筛选、List转Map、排序、分组、统计计数等简单示例如下过滤筛选分组去重Lis...
    99+
    2022-11-13
  • PHP如何应对大数据存储中的重定向挑战?
    随着互联网的不断发展,数据量也在不断增长。数据的存储和处理成为了一个重要的问题。而在处理大数据存储时,重定向挑战是一个非常普遍的问题。在本文中,我们将探讨PHP在处理大数据存储时如何应对这个挑战。 什么是重定向挑战? 重定向挑战,顾名思义...
    99+
    2023-06-20
    大数据 存储 重定向
  • 大数据中的自然语言处理:如何应对数据量的挑战?
    大数据时代的到来让我们面临了前所未有的信息量和数据量的挑战。在海量的数据中,如何准确地提取出我们需要的信息,对于企业和个人都是至关重要的。而自然语言处理技术(Natural Language Processing, NLP)就是在这样的背景...
    99+
    2023-08-09
    大数据 自然语言处理 数组
  • 如何通过go语言npm工具包,轻松应对海量大数据?
    随着大数据时代的到来,海量数据的处理成为了一个非常重要的问题。而在处理海量数据的过程中,选择一种高效的编程语言和工具包也是非常重要的。近年来,go语言因为其高效、简洁、并发处理能力强等优点,越来越受到开发者的青睐。而在go语言中,npm工...
    99+
    2023-07-01
    npm 教程 大数据
  • Java中的对象编程算法:如何处理大量数组数据?
    在Java中,处理大量数组数据是一种常见的需求。无论是在数据分析、图像处理还是机器学习等领域,都需要高效地处理大量的数据。在这种情况下,使用对象编程算法能够有效地提高代码的可读性和可维护性,并且能够更快地处理大量数据。 本文将介绍Java...
    99+
    2023-10-31
    对象 编程算法 数组
  • 如何通过对象编程提高PHP大数据开发技术的效率和质量?
    随着互联网技术的不断发展,PHP已经成为了最受欢迎的Web编程语言之一。在如今数字化的世界中,数据已经成为了重要的资源,如何通过对象编程提高PHP大数据开发技术的效率和质量,成为了我们需要思考的问题。 一、对象编程介绍 对象编程是一种面向对...
    99+
    2023-09-05
    大数据 开发技术 对象
  • Go语言Shell重定向:如何应对大数据处理中的挑战?
    在当今数据爆炸的时代,我们不仅需要高效地获取数据,更需要快速处理大量的数据。在这个过程中,Shell脚本是一个非常强大的工具,可以帮助我们快速处理数据。而Go语言作为一种高效的编程语言,可以为我们提供更高效的数据处理解决方案。本文将介绍如...
    99+
    2023-06-23
    shell 重定向 大数据
  • Java中的缓存加载算法如何应对大数据量的情况?
    随着数据量的不断增加,缓存加载算法成为了解决大数据量问题的重要手段之一。在Java中,常见的缓存加载算法包括LRU、LFU等,它们能够有效地提高数据的查询效率和程序的性能。本文将介绍Java中的缓存加载算法及其应对大数据量的方法,并提供相...
    99+
    2023-09-27
    load 缓存 编程算法
  • Javascript编程中如何使用算法来处理大量数据?
    在今天的信息时代,数据处理成为了各个领域的必备技能。而在Javascript编程中,如何使用算法来处理大量数据成为了许多程序员关注的问题。本文将深入探讨Javascript编程中如何使用算法来处理大量数据,并提供一些示例代码。 一、Java...
    99+
    2023-11-11
    编程算法 大数据 javascript
  • 如何在Javascript编程中应用算法来处理大量数据?
    在现代互联网时代,数据处理已经成为了一项非常重要的任务,无论是大型企业还是小型公司,都需要处理大量的数据。而Javascript作为一种非常流行的编程语言,其在数据处理方面也有着不可忽视的作用。在这篇文章中,我们将会介绍如何在Javascr...
    99+
    2023-11-11
    编程算法 大数据 javascript
  • Linux 上的 ASP 教程:如何使用重定向实现网页跳转和数据过滤?
    在 Linux 上,ASP 是一种非常流行的网站开发语言。在 ASP 的应用中,重定向是一项非常重要的技能,可以帮助我们实现网页跳转和数据过滤等功能。下面,我们将详细介绍如何在 Linux 上使用重定向来实现网页跳转和数据过滤。 一、网页跳...
    99+
    2023-10-28
    教程 linux 重定向
  • Go教程中的数组:如何处理大量数据
    Go语言作为一种高效、稳定的编程语言,越来越受到程序员的青睐。在Go语言中,数组是一种常见的数据类型,它可以存储一组相同类型的数据。在本文中,我们将探讨Go教程中的数组,特别是如何处理大量数据。 一、数组的定义 在Go语言中,数组的定义格式...
    99+
    2023-11-04
    教程 数组 django
  • PHP7中的数据过滤和验证:如何保证数据的正确性和安全性?
    PHP7中的数据过滤和验证:如何保证数据的正确性和安全性?概述:随着互联网的发展,数据的处理和传输已经成为了网站开发中非常重要的一环。然而,由于用户输入不可信和恶意攻击的存在,那么如何保证我们处理的数据具有正确性和安全性就变得至关重要了。P...
    99+
    2023-10-27
    数据过滤:过滤器(Filter) 数据验证:验证器(Validator) 数据安全性:安全机制(Security Mec
  • Python中如何处理大数据文件中的对象?
    在现代数据科学中,我们经常需要处理大型数据集。这些数据可能以多种格式存储,包括文本、CSV、JSON、数据库、图像和视频等。在这些数据集中,一些常见的数据类型是对象,如列表、元组、字典、类实例等。在本文中,我们将探讨如何在Python中处...
    99+
    2023-10-26
    对象 文件 大数据
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作