当前位置: 首页 > news >正文

掌握前端利器:JavaScript页面渲染高阶方法解析与实战

引言

前端开发中,页面渲染的速度和质量是衡量一个开发者水平的重要标准。而在众多的前端技术中,JavaScript以其强大的页面渲染能力独占鳌头。本文将深入探讨JavaScript在页面渲染中的应用,并通过实例展示其高阶方法,旨在帮助读者更好地掌握前端技术。

JavaScript在页面渲染中的重要性

JavaScript自创建以来一直是一种强大的编程语言,它允许开发人员操控浏览器的DOM(文档对象模型),从而改变网页的内容和样式。通过JavaScript,我们可以实现动态内容、交互效果和单页应用(SPA)等。

随着前端技术的发展,JavaScript的作用也在不断扩大。现在,它已经不仅仅是一种页面渲染的工具,更是一种构建复杂前端应用的手段。因此,掌握JavaScript页面渲染高阶方法对于前端开发者至关重要。

高阶方法解析

高阶函数是JavaScript中一个重要的概念,它指的是那些接受函数作为参数或返回函数的函数。在页面渲染中,高阶函数的应用同样广泛。

map()、reduce()和filter()

这三个函数是数组中的常用高阶函数。它们都接受一个函数作为参数,并返回一个新的数组。

  • map():用于将数组中的每个元素都通过一个函数转换成新的元素,并返回一个新的数组。
const numbers = [1, 2, 3, 4, 5];
const doubled = numbers.map(number => number * 2); // [2, 4, 6, 8, 10]
  • filter():用于筛选出数组中满足特定条件的元素,并返回一个新的数组。
const numbers = [1, 2, 3, 4, 5];
const evenNumbers = numbers.filter(number => number % 2 === 0); // [2, 4]
  • reduce():用于将数组中的元素通过一个函数累加起来,并返回一个单一的结果。
const numbers = [1, 2, 3, 4, 5];
const sum = numbers.reduce((accumulator, number) => accumulator + number, 0); // 15

sortBy()

sortBy()函数用于将数组中的元素按照给定的属性排序。它接受一个函数作为参数,该函数定义了排序规则。

const people = [{ name: 'Alice', age: 25 },{ name: 'Bob', age: 20 },{ name: 'Charlie', age: 30 }
];
const sortedPeople = people.sortBy(person => person.age); // [{ name: 'Bob', age: 20 }, { name: 'Alice', age: 25 }, { name: 'Charlie', age: 30 }]

find()、findIndex()和includes()

这三个函数用于查找数组中的元素。

  • find():返回满足特定条件的第一个元素。
  • findIndex():返回满足特定条件的第一个元素的索引。
  • includes():判断一个数组是否包含一个特定的值。
const numbers = [1, 2, 3, 4, 5];
const foundNumber = numbers.find(number => number > 3); // 4
const foundIndex = numbers.findIndex(number => number > 3); // 3
const containsFour = numbers.includes(4); // true

高阶方法实战案例:动态表格排序与筛选

让我们通过一个动态表格排序与筛选的案例来演示高阶方法的应用。假设我们有一个表格,每一行表示一个用户,每一列表示用户的属性(如姓名、年龄等)。用户可以按照不同的属性进行排序和筛选。

数据准备

首先,我们需要准备一些用户数据。这里我们使用一个包含多个用户对象的数组来表示数据源。每个用户对象包含姓名、年龄等属性。

const users = [{ name: 'Alice', age: 25 },{ name: 'Bob', age: 20 },{ name: 'Charlie', age: 30 },// ...更多用户数据...
];

表头排序与筛选功能实现

接下来,我们使用高阶函数来实现表头的排序和筛选功能。这里我们使用sortBy()filter()函数来实现。当用户点击表头时,我们根据表头对应的属性对用户数据进行排序;当用户选择筛选条件时,我们根据筛选条件对用户数据进行筛选。以下是实现这一功能的JavaScript代码:

// 获取表格元素
const table = document.getElementById('users-table');// 获取表头元素
const headers = table.getElementsByTagName('th');// 为每个表头添加点击事件
for (let header of headers) {header.addEventListener('click', function () {const property = header.dataset.property; // 获取表头对应的属性// 对用户数据进行排序users.sort((a, b) => {if (a[property] < b[property]) {return -1;} else if (a[property] > b[property]) {return 1;} else {return 0;}});// 重新渲染表格renderTable(users);});
}// 筛选功能(根据年龄筛选)
const ageSelect = document.getElementById('age-select');
ageSelect.addEventListener('change', function () {const age = ageSelect.value; // 获取筛选条件(年龄)// 对用户数据进行筛选users = users.filter(user => user.age === age);// 重新渲染表格renderTable(users);
});// 渲染表格的函数
function renderTable(users) {const tbody = document.getElementById('users-tbody');tbody.innerHTML = ''; // 清空原有的表格数据// 遍历用户数据,为每个用户创建一个表格行(tr)users.forEach(user => {const row = document.createElement('tr');row.innerHTML = `<td>${user.name}</td><td>${user.age}</td>`;tbody.appendChild(row); // 将表格行添加到表格中});
}

在上述代码中,我们首先获取了包含用户数据的表格元素和表头元素,并为每个表头添加了点击事件。当用户点击表头时,我们根据表头对应的属性对用户数据进行排序,并使用sort()方法实现升序或降序排序。然后,我们重新渲染表格,将排好序的用户数据显示在表格中。此外,我们还实现了一个筛选功能,允许用户根据年龄对用户数据进行筛选。当用户选择一个年龄时,我们根据选定的年龄对用户数据进行筛选,并重新渲染表格,将筛选后的用户数据显示在表格中。最后,我们定义了一个renderTable()函数,用于根据当前的用户数据重新渲染表格。在函数中,我们清空了原有的表格数据,并使用forEach()方法遍历用户数据,为每个用户创建一个表格行(tr),并将该行添加到表格的tbody元素中。


这一次文章总结就交给聪明的读者了。

相关文章:

掌握前端利器:JavaScript页面渲染高阶方法解析与实战

引言 前端开发中&#xff0c;页面渲染的速度和质量是衡量一个开发者水平的重要标准。而在众多的前端技术中&#xff0c;JavaScript以其强大的页面渲染能力独占鳌头。本文将深入探讨JavaScript在页面渲染中的应用&#xff0c;并通过实例展示其高阶方法&#xff0c;旨在帮助读者…...

面试题——网络IO模型

一、socket socket是在应用层和传输层中间的抽象层&#xff0c;它把传输层&#xff08;TCP/UDP&#xff09;的复杂操作抽象成一些简单的接口&#xff0c;供应用层调用实现进程在网络中的通信。Socket起源于UNIX&#xff0c;在Unix一切皆文件的思想下&#xff0c;进程间通信就被…...

【JUC基础】JUC入门基础(二)

目录 异步回调JMM 理解对 volatile 的理解1、保证可见性2、不保证原子性3、禁止指令重排 对 JMM 的理解 详解单例模式饿汉式懒汉式DCL懒汉式&#xff1a;双重检测锁模式的懒汉式单例静态内部类实现单例通过反射破坏单例&#xff0c;修改后的DCL饿汉式枚举实现单例防止反射破坏 …...

Git Bash 和 Git GUI中文汉化

目录 为什么要中文汉化&#xff1f;Git Bash的汉化Git GUI的汉化 为什么要中文汉化&#xff1f; 看到中文大概能猜出是什么意思&#xff0c;便于使用&#xff0c;特别是Git GUI&#xff0c;中文版的菜单很容易理解是要做什么&#xff0c;如下图&#xff1a; Git Bash的汉化 …...

【Ubuntu】Ubuntu常用软件部署

1.安装jdk1.8 (1).apt方式安装 1).安装 1.在终端中输入以下命令&#xff0c;以更新软件包列表 sudo apt-get update2.在终端中输入以下命令&#xff0c;以安装JDK 1.8 sudo apt-get install openjdk-8-jdk3.将Java 1.8设置为默认版本。在终端中输入以下命令 sudo update-…...

Hadoop HA模式切换

Hadoop HA模式下 主从的切换&#xff08;操作命令&#xff09; YARN HA 获取所有RM节点的状态 yarn rmadmin -getAllServiceState获取 rm1 节点的状态 yarn rmadmin -getServiceState rm1手动将 rm1 的状态切换到STANDBY yarn rmadmin -transitionToStandby rm1 ##或者 y…...

自然语言处理(四):全局向量的词嵌入(GloVe)

全局向量的词嵌入&#xff08;GloVe&#xff09; 全局向量的词嵌入&#xff08;Global Vectors for Word Representation&#xff09;&#xff0c;通常简称为GloVe&#xff0c;是一种用于将词语映射到连续向量空间的词嵌入方法。它旨在捕捉词语之间的语义关系和语法关系&#…...

Flink中RPC实现原理简介

前提知识 Akka是一套可扩展、弹性和快速的系统&#xff0c;为此Flink基于Akka实现了一套内部的RPC通信框架&#xff1b;为此先对Akka进行了解 Akka Akka是使用Scala语言编写的库&#xff0c;基于Actor模型提供一个用于构建可扩展、弹性、快速响应的系统&#xff1b;并被应用…...

ELK安装、部署、调试(五)filebeat的安装与配置

1.介绍 logstash 也可以收集日志&#xff0c;但是数据量大时太消耗系统新能。而filebeat是轻量级的&#xff0c;占用系统资源极少。 Filebeat 由两个主要组件组成&#xff1a;harvester 和 prospector。 采集器 harvester 的主要职责是读取单个文件的内容。读取每个文件&…...

Python数据分析案例30——中国高票房电影分析(爬虫获取数据及分析可视化全流程)

案例背景 最近总看到《消失的她》票房多少多少&#xff0c;《孤注一掷》票房又破了多少多少..... 于是我就想自己爬虫一下获取中国高票房的电影数据&#xff0c;然后分析一下。 数据来源于淘票票&#xff1a;影片总票房排行榜 (maoyan.com) 爬它就行。 代码实现 首先爬虫获…...

科技资讯|苹果Vision Pro头显申请游戏手柄专利和商标

苹果集虚拟现实和增强现实于一体的头戴式设备 Vision Pro 推出一个月后&#xff0c;美国专利局公布了两项苹果公司申请的游戏手柄专利&#xff0c;其中一项的专利图如下图所示。据 PatentlyApple 报道&#xff0c;虽然专利本身并不能保证苹果公司会推出游戏手柄&#xff0c;但是…...

Compose学习 - remember、mutableStateOf的使用

一、需求 在显示界面中&#xff0c;数据变动&#xff0c;界面刷新是非常常见的操作&#xff0c;所以使用compose该如何实现呢&#xff1f; 二、remember、mutableStateOf的使用 我们可以借助标题的两个概念 remember、mutableStateOf来完成。这里先不写定义&#xff0c;定义…...

字符串哈希

字符串前缀哈希法 str "ABCABCDEHGJK" 预处理每一个前缀的哈希值,如 : h[0] 0; h[1] "A"的哈希值 h[2] "AB"的哈希值 h[3] "ABC"的哈希值 h[4] "ABCA"的哈希值 问题 : 如何定义一个前缀的哈希值 : 将字符串看…...

【python】【centos】使用python杀死进程后自身也会退出

问题 使用python杀死进程后自身程序也会退出&#xff0c;无法执行后边的代码 这样不行&#xff1a; # cmd " ps -ef | grep -v grep | grep -E task_pull_and_submit.py$|upgrade_system.py$| awk {print $2}"# pids os.popen(cmd).read().strip(\n).split(\n)# p…...

【ES系列】(一)简介与安装

首发博客地址 首发博客地址[1] 系列文章地址[2] 教学视频[3] 为什么要学习 ES? 强大的全文搜索和检索功能&#xff1a;Elasticsearch 是一个开源的分布式搜索和分析引擎&#xff0c;使用倒排索引和分布式计算等技术&#xff0c;提供了强大的全文搜索和检索功能。学习 ES 可以掌…...

opencv案例06-基于opencv图像匹配的消防通道障碍物检测与深度yolo检测的对比

基于图像匹配的消防通道障碍物检测 技术背景 消防通道是指在各种险情发生时&#xff0c;用于消防人员实施营救和被困人员疏散的通道。消防法规定任何单位和个人不得占用、堵塞、封闭消防通道。事实上&#xff0c;由于消防通道通常缺乏管理&#xff0c;导致各种垃圾&#xff0…...

练习2:88. 合并两个有序数组

这里写自定义目录标题 题目解体思路代码 题目 给你两个按非递减顺序排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m和 n &#xff0c;分别表示 nums1 和 nums2中的元素数目。 请你合并nums2 到 nums1 中&#xff0c;使合并后的数组同样按非递减顺序排列。 注意&a…...

【代码随想录day23】不同路径

题目 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff09;。 问总共有多少条不同的路径&#xff1f; 示…...

SpringBoot 博客网站

SpringBoot 博客网站 系统功能 登录注册 博客列表展示 搜索 分类 个人中心 文章分类管理 我的文章管理 发布文章 开发环境和技术 开发语言&#xff1a;Java 使用框架: SpringBoot jpa H2 Spring Boot是一个用于构建Java应用程序的开源框架&#xff0c;它是Spring框架的一…...

【分布式搜索引擎elasticsearch】

文章目录 1.elasticsearch基础索引和映射索引库操作索引库操作总结 文档操作文档操作总结 RestAPIRestClient操作文档 1.elasticsearch基础 什么是elasticsearch&#xff1f; 一个开源的分布式搜索引擎&#xff0c;可以用来实现搜索、日志统计、分析、系统监控等功能 什么是…...

2026 AI搜索迭代下的获客革新:SEOGEO双引擎战略落地实战方案

2026 AI搜索迭代下的获客革新&#xff1a;SEO&GEO双引擎战略落地实战方案摘要&#xff1a;2026年生成式AI全面渗透搜索场景&#xff0c;传统关键词SEO流量遭遇结构性下滑&#xff0c;零点击搜索成为行业常态。本文以泉州本地中小企业数字化服务场景为依托&#xff0c;深度剖…...

2026 年一人公司创业热潮:政策与 AI 驱动,机遇背后暗藏风险

一人公司创业热潮来袭&#xff1a;政策与 AI 双驱动&#xff0c;机遇背后暗藏风险从苏州到深圳&#xff0c;从成都到上海&#xff0c;一种名为 OPC&#xff08;One Person Company&#xff0c;一人公司&#xff09;的创业范式正以前所未有的速度席卷全国。数据为证&#xff1a;…...

寄存器文件与SRAM:芯片设计中存储层次的核心差异与选型指南

1. 项目概述&#xff1a;从“存储”到“访问”的鸿沟在数字电路和处理器设计的核心地带&#xff0c;有两个名字经常被提及&#xff0c;却又常常让初学者甚至一些从业者感到混淆&#xff1a;Register File&#xff08;寄存器文件&#xff09;和SRAM&#xff08;静态随机存取存储…...

UE4SS技术解析:构建虚幻引擎游戏逆向工程与模组开发的完整生态

UE4SS技术解析&#xff1a;构建虚幻引擎游戏逆向工程与模组开发的完整生态 【免费下载链接】RE-UE4SS Injectable LUA scripting system, SDK generator, live property editor and other dumping utilities for UE4/5 games 项目地址: https://gitcode.com/gh_mirrors/re/RE…...

实力入选丨全知科技荣登嘶吼2026网络安全产业图谱

近日&#xff0c;嘶吼安全产业研究院正式发布《嘶吼2026网络安全产业图谱》。全知科技凭借在数据安全赛道的长期深耕积淀、持续技术创新能力与规模化行业落地实践&#xff0c;成功入选图谱数据安全核心板块&#xff0c;强势入围开发与应用安全、数据安全两大核心板块&#xff0…...

赛昉科技昉·星光单板计算机:RISC-V开源架构从IP到系统平台的跨越

1. 从获奖新闻到技术内核&#xff1a;赛昉科技与RISC-V的破局之路 最近在技术圈里&#xff0c;一条关于赛昉科技在“思维实验室论坛”上斩获“年度企业”和“年度产品”双奖的消息&#xff0c;引起了不少开发者和硬件爱好者的讨论。对于不熟悉RISC-V领域的朋友来说&#xff0c;…...

终极德州扑克GTO求解器完整指南:从零开始掌握博弈论最优策略的三大突破

终极德州扑克GTO求解器完整指南&#xff1a;从零开始掌握博弈论最优策略的三大突破 【免费下载链接】TexasSolver &#x1f680; A very efficient Texas Holdem GTO solver :spades::hearts::clubs::diamonds: 项目地址: https://gitcode.com/gh_mirrors/te/TexasSolver …...

如何查询Flexy 4G扩展卡GSM信号强度

GSM信号强度查询与历史记录趋势图一、硬件准备1.1 硬件安装与确认1. 安装GSM扩展卡&#xff1a;将支持GSM功能的扩展卡插入Flexy 205的扩展卡插槽&#xff08;Slot1或Slot2&#xff09;&#xff0c;确保硬件连接牢固。2. 插入SIM卡&#xff1a;确保SIM卡无欠费、信号覆盖正常。…...

将PHP C++扩展从php5升级到php7

将PHP C扩展从php5升级到php7 在没有怎么看明白php5 php7源码的情况下&#xff0c;接手一份基于php5写c扩展&#xff0c;如何接手快速升级到php7环境下也能使用呢&#xff1b;我仅仅修改了所引用的一个php中对象处理的头文件&#xff0c;就满足了要求&#xff0c;扩展被编译通过…...

MoE架构揭秘:逐Token路由与活跃参数量的工程真相

1. 项目概述&#xff1a;当“千亿参数”不再是个吓人的数字&#xff0c;而是一套精打细算的调度系统你肯定见过这类标题&#xff1a;“GPT-4拥有1.8万亿参数&#xff01;”——第一反应是震撼&#xff0c;第二反应是疑惑&#xff1a;我的显卡连加载一个7B模型都得开量化&#x…...