借用空数组方法:处理类数组的对象的实用技巧

news2025/1/19 17:19:10

前言

        NodeList 不是一个数组,是一个类似数组的对象 (Like Array Object)。虽然 NodeList 不是一个数组,但是可以使用 forEach() 来迭代。你还可以使用 Array.from() 将其转换为数组。

        不过,有些浏览器较为过时,没有实现 NodeList.forEach() 和 Array.from(),那么我们可以借用空数组方法来实现。借用空数组的方法是一种常见而有用的技巧。它允许我们在处理这些对象时,使用数组的方法进行迭代和操作,从而提升代码的可读性和简洁性。

        浏览器兼容性:

原理

        这个技巧的实现原理是利用 JavaScript 的函数绑定能力和借用空数组的方法。通过将数组的方法与类似数组的对象绑定,我们可以将这些方法应用于这些对象,就好像它们是真正的数组一样。

        例如,让我们再次以 NodeList 为例进行说明。NodeList 是一个类数组对象,用于存储元素列表。然而,NodeList 并没有内置的迭代方法,如 .forEach()。通过借用空数组的方法,我们可以轻松地使用 .forEach() 来遍历 NodeList 中的元素,而不需要手动编写循环:

let nodeList = document.querySelectorAll('li');
[].forEach.call(nodeList, function(item) {
  // 对每个元素执行操作
  console.log(item.textContent);
});

        在上面的代码中,我们首先通过 document.querySelectorAll('li') 方法获取一个 NodeList 对象,然后通过 [].forEach.call() 将 NodeList 转换为数组,并将 .forEach() 方法绑定到这个数组上。最后,我们可以直接使用 .forEach() 方法来迭代 NodeList 中的每个元素,并执行自定义的操作。

        同样的技巧也适用于其他类似数组的对象,比如 Arguments 对象,它是一个包含函数参数的类数组对象。通过借用空数组的方法,我们可以使用数组的方法来处理 Arguments 对象,例如使用 .forEach() 来遍历参数列表。

        借用空数组的方法在处理类似数组的对象时非常常见,特别是在需要对这些对象进行迭代、转换或过滤的情况下。它提供了一种简洁而优雅的方式来处理这些对象,避免了手动编写循环的繁琐和重复。

Array.from

        不过在某些情况下,更合适的方法可能是使用现代的 JavaScript 特性和语法。例如,可以使用 Array.from() 方法将类似数组的对象转换为真正的数组,然后直接使用数组的方法来操作。这种方法更加直观和易于理解。

let nodeList = document.querySelectorAll('li');
let array = Array.from(nodeList);
// 或者
// let array = [...nodeList];

array.forEach(function(item) {
  // 对每个元素执行操作
  console.log(item.textContent);
});

总结

        总之,借用空数组的方法是一种方便而常见的技巧,可用于处理类似数组的对象。通过将数组的方法与这些对象绑定,我们可以使用数组的方法来处理它们,提高代码的可读性和简洁性。另外我们还可以考虑使用现代的 JavaScript 特性来处理类似数组的对象。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/895927.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++项目实战之演讲比赛流程管理系统

演讲比赛流程管理系统 1. 演讲比赛程序需求 1.1 比赛规则 学校举行一场演讲比赛,共有12个人参加。比赛共两轮,第一轮为淘汰赛,第二轮为决赛 每名选手都有对应的编号,如 10001 ~ 10012 比赛方式:分组比赛&#xff0…

git提交代码是用git-merge还是git-rebase呢?

什么是git merge? git merge是我们在git操作中频繁会用到的一个命令,它主要实现的功能便是为我们进行分支代码的合并,也就是将两个或两个以上的开发历史合并在一起的操作。 它有以下两种用途: 更新代码时,整合另一个…

行业资讯丨“燃气智慧化”到底是什么?

文章来源:网络 关键词:智慧燃气、智慧燃气场站、设备设施数字化、数字孪生、工业互联网 带你了解燃气信息化 随着科技的不断进步和信息化的快速发展,各行各业都在积极探索如何将技术应用于业务中,以提高效率和服务质量。 燃气…

Java实现钉钉企业内部应用机器和自定义机器人发送消息

前言 公司让写一个服务监控的功能,当监测到服务停止时,向钉钉群里推送报警信息。之前大概看到钉钉的开放平台的API文档,好像能群发消息的只有机器人。 钉钉开放平台目前提供三种机器人: 企业内部应用机器人 群模板机器人 自定义机器人 本来向用自己比较熟悉的自定义机器人…

初试时间官宣!研招网发布下半年重要时间节点!今日速报来了

距24考研初试还有127天,今天给大家带来初试和报名时间官宣消息、考研报名注意事项、研招网发布的2024考研“保姆级”下半年重要时间节点。有用记得收藏 24考研报名和初试时间官宣 已有学校在招生简章中明确24考研初试时间 初试时间预计为:2023年12月23…

当我们都是那个“和尚”:团队合作中的责任与动力

引言:三个和尚的故事 中国的古老民间故事中,有一个被广为传颂的故事 - 三个和尚的故事。该故事描述了三位和尚居住在远离水源的山上寺庙中。当只有一个和尚时,他每天下山提水,日复一日,从未间断。但当寺庙里有了三个和…

【Java】常见面试题:HTTP/HTTPS、Servlet、Cookie、Linux和JVM

文章目录 1. 抓包工具(了解)2. 【经典面试题】GET和POST的区别:3. URL中不是也有这个服务器主机的IP和端口吗,为啥还要搞个Host?4. 补充5. HTTP响应状态码6. 总结HTTPS工作过程(经典面试题)7. H…

后台程序 报错内容:java.sql.SQLException: Java heap space

原因有以下可能: 1、查询没有通过参数,而是直接查询出所有的记录; 2、是由于mysql单个字段存储的内容过大导致堆内存溢出; 3、JVM启动时,JVM堆会自动设置heap size值,值太小导致;

【高级程序设计语言C++】布隆过滤器

1. 布隆过滤器的概念2. 布隆过滤器的简单实现2.1. 布隆过滤器的长度和哈希函数的个数2.2. 布隆过滤器的结构2.2.1. 插入2.2.2. 查询2.2.3. 误判率的测试 2.3. 布隆过滤器的删除 1. 布隆过滤器的概念 布隆过滤器(Bloom Filter)是一种用于快速判断一个元素…

前端实习day30

今天又是一个繁忙的一天,加功能,改样式,改得头皮发麻,预定的任务还是没能完成,改起来真得太头疼,代码太乱了!!昨天那个bug,今天问了一下同事,不到五分钟就解决…

【面试八股文】每日一题:谈谈你对线程的理解

每日一题-Java核心-谈谈你对线程的理解【面试八股文】 Java线程是Java程序中的执行单元。一个Java程序可以同时运行多个线程,每个线程可以独立执行不同的任务。线程的执行是并发的,即多个线程可以同时执行。 1. 线程的特点 Java中的线程有如下的特点 轻…

背包问题 - 动态规划

1. 背包问题总结 暴力的解法是指数级别的时间复杂度。进而才需要动态规划的解法来进行优化! 背包问题是动态规划(Dynamic Planning) 里的非常重要的一部分,关于几种常见的背包,其关系如下: 2. 01背包 01背包问题是…

离谱,居然还有网络工程师不懂什么是Overlay网络?

下午好,我是老杨。 伴随着网络技术的发展,数据中心的二层组网结构早已出现了阶段性的架构变化。 数据中心网络分为了Underlay和Overlay两个部分,网络进入了Overlay虚拟化阶段。 很多小友希望能多输出一些新技术,这不&#xff0c…

去年校招面试中Hadoop高频都问些什么?秋招在即,快收藏!

1 总述 校招是远不同于社招的,企业对学生的要求更多的是一些概念性的东西,即所谓的八股文。但有些场景类的题目也是会涉及到,尤其是在一些中大厂的面试题中。场景题固然是能不能中大厂中必不可少的部分,但是基础牢不牢才是能不能…

Docker安装基础使用练习

目录 1、安装Docker-CE 1)简单使用yum方式安装 ! 2)配置镜像加速: 2、下载系统镜像(Ubuntu、 centos) 1)先查看我们所需的镜像有哪些版本。使用search命令! 2)下载镜像使用的是pul…

Elasticsearch 查询之Function Score Query

前言 ES 的主查询评分模式分为两种,是信息检索领域的重要算法: TF-IDF 算法 和 BM25 算法。 Elasticsearch 从版本 5.0 开始引入了 BM25 算法作为默认的文档评分(relevance scoring)算法。在此之前,Elasticsearch 使…

第 4 章 链表(1)

4.1链表(Linked List)介绍 链表是有序的列表,但是它在内存中是存储如下 小结: 链表是以节点的方式来存储,是链式存储每个节点包含 data 域, next 域:指向下一个节点.如图:发现链表的各个节点不一定是连续存储.链表分带头节点的链…

forEach时候,Exception in thread “AWT-EventQueue-0“ java.util.ConcurrentModificat

问题分析: 在很多容器中,都有一个变量记录你从结构上修改此容器的次数,叫做modCount,查看ArrayList的add()和remove()方法就可以发现,每次你调用add方法()向容器里面增加了一个元素,或者你调用Remove()方法…

每日一博 - MPP(Massively Parallel Processing,大规模并行处理)架构

文章目录 概述优点缺点小结 概述 MPP(Massively Parallel Processing,大规模并行处理)架构是一种常见的数据库系统架构,主要用于提高数据处理性能。它通过将多个单机数据库节点组成一个集群,实现数据的并行处理。 在 …

PAT 1018 Public Bike Management

个人学习记录,代码难免不尽人意。 There is a public bike service in Hangzhou City which provides great convenience to the tourists from all over the world. One may rent a bike at any station and return it to any other stations in the city. The Pu…