前端知识点---稀疏数组(javascript)

devtools/2024/11/26 10:10:33/

文章目录

  • 稀疏数组(javascript)
    • 稀疏数组的特点:
    • 如何创建稀疏数组:
    • 稀疏数组的行为:
    • 稀疏数组的实际应用:
    • 注意事项:

javascript_1">稀疏数组(javascript)

在 JavaScript 中,稀疏数组(sparse array) 是一种数组,其中部分索引是未定义的或未被分配值。与普通的“密集数组”不同,稀疏数组的某些索引上没有实际的元素(即没有显式分配值),但这些索引在逻辑上是存在的。

稀疏数组的特点:

  • 缺少的元素:
    稀疏数组的某些索引处是“空的”(没有显式的值)。这些位置会被认为是“未初始化”的。

  • 长度计算:
    稀疏数组的 length 属性会考虑数组中最大索引+1,而不会因为某些索引没有值而减少。

  • 性能差异:
    稀疏数组可能会影响性能,因为 JavaScript 引擎在处理稀疏数组时需要额外工作来处理这些“缺失的”索引。

如何创建稀疏数组:

以下是创建稀疏数组的一些方法:

  1. 使用 Array 构造函数
javascript">let sparseArray = new Array(10); // 创建了一个长度为 10 的稀疏数组
console.log(sparseArray); // [ <10 empty items> ]
console.log(sparseArray.length); // 10
  1. 使用索引直接赋值
javascript">let sparseArray = [];
sparseArray[3] = "JavaScript"; // 只给索引 3 赋值
console.log(sparseArray); // [ <3 empty items>, 'JavaScript' ]
console.log(sparseArray.length); // 4
  1. 删除元素
javascript">let denseArray = [1, 2, 3];
delete denseArray[1]; // 删除索引 1 的元素
console.log(denseArray); // [ 1, <1 empty item>, 3 ]
console.log(denseArray.length); // 3

稀疏数组的行为:

索引不存在:
未赋值的索引不会显示在迭代中,例如通过 forEach 或 map 方法。

javascript">let sparseArray = [1, , 3];
sparseArray.forEach((value, index) => {console.log(index, value); // 输出:0 1 和 2 3,忽略空位
});
undefined vs 空元素:
空位与 undefined 不同,空位实际上是“不存在”的。
javascript">let arr = [1, , 3];
console.log(arr[1]); // 输出:undefined
console.log(1 in arr); // 输出:false(表示索引 1 并不存在)
使用 in 运算符检测空位:
in 运算符可以用来检查索引是否在数组中。
javascript">let sparseArray = [1, , 3];
console.log(1 in sparseArray); // false(空位不存在)
sparseArray[1] = undefined;
console.log(1 in sparseArray); // true(已定义但值为 undefined)

迭代方法的表现:

  • forEach、map、filter 等会跳过稀疏数组中的空位。
  • for…in 和 Object.keys 只会遍历实际存在的索引。
  • for…of 也会跳过空位。

稀疏数组的实际应用:

  • 表示大型矩阵数据,节省存储空间。
  • 临时跳过某些索引的数据操作。

注意事项:

尽量避免无意间创建稀疏数组,因为这可能导致代码难以调试。
如果必须使用稀疏数组,建议明确文档化其意图。
如果想检查稀疏数组中的空位,可以使用以下方法:

javascript">let sparseArray = [1, , 3];
console.log(sparseArray.map((x, i) => x ?? `empty at index ${i}`));
// 输出:[1, "empty at index 1", 3]

http://www.ppmy.cn/devtools/137092.html

相关文章

C#+数据库 实现动态权限设置

将权限信息存储在数据库中&#xff0c;支持动态调整。根据用户所属的角色、特定的功能模块&#xff0c;动态加载权限” 1. 数据库设计 根据这种需求&#xff0c;可以通过以下表设计&#xff1a; 用户表 (Users)&#xff1a;存储用户信息。角色表 (Roles)&#xff1a;存储角色…

【深度学习】利用Java DL4J训练中文版的Word2Vec模型

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…

【优选算法】前缀和

目录 一、[【模板】前缀和](https://www.nowcoder.com/practice/acead2f4c28c401889915da98ecdc6bf?tpId230&tqId2021480&ru/exam/oj&qru/ta/dynamic-programming/question-ranking&sourceUrl%2Fexam%2Foj%3Fpage%3D1%26tab%3D%25E7%25AE%2597%25E6%25B3%2595…

Elasticsearch中的节点(比如共20个),其中的10个选了一个master,另外10个选了另一个master,怎么办?

大家好&#xff0c;我是锋哥。今天分享关于【Elasticsearch中的节点&#xff08;比如共20个&#xff09;&#xff0c;其中的10个选了一个master&#xff0c;另外10个选了另一个master&#xff0c;怎么办&#xff1f;】面试题。希望对大家有帮助&#xff1b; Elasticsearch中的节…

C语言蓝桥杯组题目

系列文章目录 文章目录 系列文章目录前言题目第一题.1, 2, 3, 4 能组成多少个互不相同且无重复数字的三位数&#xff1f;都是多少&#xff1f;思路 第二题: 一个整数&#xff0c;它加上100后是一个完全平方数&#xff0c;再加上168又是一个完全平方数&#xff0c;请问该数是多少…

如何更改手机GPS定位

你是否曾想过更改手机GPS位置以保护隐私、玩游戏或访问受地理限制的内容&#xff1f;接下来我将向你展示如何使用 MagFone Location Changer 更改手机GPS 位置&#xff01;无论是在玩Pokmon GO游戏、发布社媒贴子&#xff0c;这种方法都快速、简单且有效。 第一步&#xff1a;下…

设计模式——简单工厂模型、工厂模式、抽象工厂模式、单例模式、代理模式、模板模式

设计模式 面向接口编程&#xff0c;而不是面向实现。这个很重要&#xff0c;也是优雅的、可扩展的代码的第一步。 职责单一原则。每个类都应该只有一个单一的功能&#xff0c;并且该功能应该由这个类完全封装起来。 对修改关闭&#xff0c;对扩展开放。对修改关闭是说&#x…

前端高能组件库 Shadcn-UI

你是不是用 element-ui 或者 ant-design &#xff0c;然后&#xff0c;开发时常常遇到需要匹配设计稿时调样式的痛苦。 Shadcn-UI 结合tailwindcss &#xff0c;即可与让你享受组件同时随意的设置样式。 支持 VUE 官方地址&#xff1a;shadcn/ui 项目地址&#xff1a;https:…