热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

深入解析JavaScript数组的创建与常用方法

JavaScript中的数组是数据集合的核心结构之一,内置了多种实用的方法。掌握这些方法不仅能提高开发效率,还能显著提升代码的质量和可读性。本文将详细介绍数组的创建方式及常见操作方法。
### 一、数组的创建

1. **数组字面量表示法**
这是最简单的创建数组的方式。
```Javascript
let arr1 = []; // 创建一个空数组
let arr2 = [20]; // 创建一个包含一个元素为20的数组
let arr3 = ['lily', 'lucy', 'Tom']; // 创建一个包含三个字符串的数组
```

2. **使用Array构造函数**
可以不带参数或带参数来创建数组。
- **无参构造**:`let arr4 = new Array();` // 创建一个空数组
- **带参构造**:如果只传入一个数值参数,则创建一个指定长度的空数组;若传入非数值或多个参数,则创建包含这些参数的数组。
```Javascript
let arr5 = new Array(20); // 创建一个包含20个未定义元素的数组
let arr6 = new Array('lily', 'lucy', 'Tom'); // 创建一个包含三个字符串的数组
let arr7 = new Array('23'); // 创建一个包含单个字符串'23'的数组
```

3. **使用Array.of方法**
ES6引入的新特性,旨在解决Array构造器的一个特殊行为问题。
```Javascript
let arr8 = Array.of(1, 2); // 创建一个包含两个元素的数组
console.log(arr8.length); // 输出2
console.log(arr8[0]); // 输出1
```

4. **使用Array.from方法**
此方法用于将类数组对象或可迭代对象转换成真正的数组。
```Javascript
function arga(...args) {
let arg = Array.from(args);
console.log(arg); // 输出传递给函数的实际参数组成的数组
}
arga('arr1', 26, 'from'); // 输出: ['arr1', 26, 'from']
```

### 二、数组的常用方法

#### 1. join()
将数组的所有元素连接成一个字符串,默认以逗号分隔。
```Javascript
let arr = [1, 2, 3];
console.log(arr.join()); // 输出: '1,2,3'
console.log(arr.join('-')); // 输出: '1-2-3'
```

#### 2. push() 和 pop()
- `push()`:向数组末尾添加一个或多个元素,并返回新的长度。
- `pop()`:移除并返回数组的最后一个元素。
```Javascript
let names = ['Lily', 'lucy', 'Tom'];
names.push('Jack', 'Sean');
console.log(names); // 输出: ['Lily', 'lucy', 'Tom', 'Jack', 'Sean']
console.log(names.pop()); // 输出: 'Sean'
```

#### 3. shift() 和 unshift()
- `shift()`:移除并返回数组的第一个元素。
- `unshift()`:向数组开头添加一个或多个元素,并返回新长度。
```Javascript
names.unshift('Jack', 'Sean');
console.log(names.shift()); // 输出: 'Jack'
```

#### 4. sort()
对数组元素进行排序,默认按字符串升序排列。
```Javascript
let arr1 = ['a', 'd', 'c', 'b'];
console.log(arr1.sort()); // 输出: ['a', 'b', 'c', 'd']
let arr2 = [13, 24, 51, 3];
console.log(arr2.sort((a, b) => a - b)); // 使用比较函数实现数字排序
```

#### 5. reverse()
颠倒数组中元素的顺序。
```Javascript
let arr = [13, 24, 51, 3];
console.log(arr.reverse()); // 输出: [3, 51, 24, 13]
```

#### 6. concat()
连接两个或多个数组,返回一个新数组而不改变原数组。
```Javascript
let arr = [1, 3, 5, 7];
let arrCopy = arr.concat(9, [11, 13]);
console.log(arrCopy); // 输出: [1, 3, 5, 7, 9, 11, 13]
```

#### 7. slice()
提取从起始索引到结束索引(不包括)之间的元素,返回一个新数组。
```Javascript
let arr = [1, 3, 5, 7, 9, 11];
console.log(arr.slice(1, 4)); // 输出: [3, 5, 7]
```

#### 8. splice()
可用于删除、插入或替换数组中的元素。
```Javascript
let arr = [1, 3, 5, 7, 9, 11];
let removed = arr.splice(0, 2); // 删除前两项
console.log(arr); // 输出: [5, 7, 9, 11]
console.log(removed); // 输出: [1, 3]
```

#### 9. indexOf() 和 lastIndexOf()
分别从前往后和从后往前查找指定元素的位置。
```Javascript
let arr = [1, 3, 5, 7, 7, 5, 3, 1];
console.log(arr.indexOf(5)); // 输出: 2
console.log(arr.lastIndexOf(5)); // 输出: 5
```

#### 10. forEach()
遍历数组中的每个元素,执行指定的回调函数。
```Javascript
let arr = [11, 22, 33, 44, 55];
arr.forEach((x, index, a) => console.log(`${x}|${index}|${a === arr}`));
```

#### 11. map()
创建一个新数组,其结果是对原数组每个元素调用提供的函数后的值。
```Javascript
let arr = [1, 2, 3, 4, 5];
let squared = arr.map(item => item * item);
console.log(squared); // 输出: [1, 4, 9, 16, 25]
```

#### 12. filter()
创建一个新数组,其中包含所有通过测试的元素。
```Javascript
let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
let filtered = arr.filter(x => x >= 8 || x % 3 === 0);
console.log(filtered); // 输出: [3, 6, 8, 9, 10]
```

#### 13. fill()
用指定的值填充数组中的部分或全部元素。
```Javascript
let arr = [1, 2, 3, 'cc', 5];
arr.fill(1, 2, 4); // 从索引2开始到索引4(不包括),用1填充
console.log(arr); // 输出: [1, 2, 1, 1, 5]
```

#### 14. every() 和 some()
- `every()`:检查数组中的所有元素是否都满足条件。
- `some()`:检查数组中是否存在至少一个元素满足条件。
```Javascript
let arr = [1, 2, 3, 4, 5];
console.log(arr.every(x => x <10)); // 输出: true
console.log(arr.some(x => x > 3)); // 输出: true
```

#### 15. includes()
判断数组是否包含某个特定的值。
```Javascript
let arr = [22, 3, 31, 12, 'arr'];
console.log(arr.includes(31)); // 输出: true
console.log(arr.includes(31, 3)); // 从索引3开始查找,输出: false
```

#### 16. reduce() 和 reduceRight()
通过一个累加器累积数组中的值,最终返回一个单一的结果。
```Javascript
let values = [1, 2, 3, 4, 5];
let sum = values.reduce((prev, cur) => prev + cur, 10);
console.log(sum); // 输出: 25
```

#### 17. find() 和 findIndex()
- `find()`:返回第一个满足条件的元素。
- `findIndex()`:返回第一个满足条件的元素的索引。
```Javascript
let arr = [1, 2, 3, 'arr', 5, 1, 9];
console.log(arr.find(value => value > 2)); // 输出: 3
console.log(arr.findIndex(value => value > 2)); // 输出: 2
```

#### 18. copyWithin()
将数组的一部分复制到另一部分。
```Javascript
let arr = [1, 2, 3, 'arr', 5];
arr.copyWithin(3, 0, 2);
console.log(arr); // 输出: [1, 2, 3, 1, 2]
```

#### 19. flat() 和 flatMap()
- `flat()`:将多维数组展平为一维数组。
- `flatMap()`:先映射再展平。
```Javascript
let arr = [0, 1, 2, [3, 4]];
console.log(arr.flat()); // 输出: [0, 1, 2, 3, 4]
let arr2 = [1, 2, [3, 4], [5, 6]];
console.log(arr2.flatMap(x => [x])); // 输出: [1, 2, 3, 4, 5, 6]
```

#### 20. entries(), keys(), 和 values()
提供对数组键名、键值或键值对的遍历。
```Javascript
for (let [index, elem] of ['a', 'b'].entries()) {
console.log(index, elem);
} // 输出: 0 'a', 1 'b'
```

推荐阅读
  • 本文探讨了如何在给定整数N的情况下,找到两个不同的整数a和b,使得它们的和最大,并且满足特定的数学条件。 ... [详细]
  • Splay Tree 区间操作优化
    本文详细介绍了使用Splay Tree进行区间操作的实现方法,包括插入、删除、修改、翻转和求和等操作。通过这些操作,可以高效地处理动态序列问题,并且代码实现具有一定的挑战性,有助于编程能力的提升。 ... [详细]
  • 尽管使用TensorFlow和PyTorch等成熟框架可以显著降低实现递归神经网络(RNN)的门槛,但对于初学者来说,理解其底层原理至关重要。本文将引导您使用NumPy从头构建一个用于自然语言处理(NLP)的RNN模型。 ... [详细]
  • Scala 实现 UTF-8 编码属性文件读取与克隆
    本文介绍如何使用 Scala 以 UTF-8 编码方式读取属性文件,并实现属性文件的克隆功能。通过这种方式,可以确保配置文件在多线程环境下的一致性和高效性。 ... [详细]
  • JavaScript实现表格数据的实时筛选功能
    本文介绍如何使用JavaScript实现对表格数据的实时筛选,帮助开发者提高用户体验。通过简单的代码示例,展示如何根据用户输入的关键字动态过滤表格内容。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • 扫描线三巨头 hdu1928hdu 1255  hdu 1542 [POJ 1151]
    学习链接:http:blog.csdn.netlwt36articledetails48908031学习扫描线主要学习的是一种扫描的思想,后期可以求解很 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 从零开始构建完整手机站:Vue CLI 3 实战指南(第一部分)
    本系列教程将引导您使用 Vue CLI 3 构建一个功能齐全的移动应用。我们将深入探讨项目中涉及的每一个知识点,并确保这些内容与实际工作中的需求紧密结合。 ... [详细]
  • 本题涉及一棵由N个节点组成的树(共有N-1条边),初始时所有节点均为白色。题目要求处理两种操作:一是改变某个节点的颜色(从白变黑或从黑变白);二是查询从根节点到指定节点路径上的第一个黑色节点,若无则输出-1。 ... [详细]
  • 本文详细介绍了中央电视台电影频道的节目预告,并通过专业工具分析了其加载方式,确保用户能够获取最准确的电视节目信息。 ... [详细]
  • Codeforces Round #566 (Div. 2) A~F个人题解
    Dashboard-CodeforcesRound#566(Div.2)-CodeforcesA.FillingShapes题意:给你一个的表格,你 ... [详细]
  • 本题探讨如何通过最大流算法解决农场排水系统的设计问题。题目要求计算从水源点到汇合点的最大水流速率,使用经典的EK(Edmonds-Karp)和Dinic算法进行求解。 ... [详细]
  • PHP 过滤器详解
    本文深入探讨了 PHP 中的过滤器机制,包括常见的 $_SERVER 变量、filter_has_var() 函数、filter_id() 函数、filter_input() 函数及其数组形式、filter_list() 函数以及 filter_var() 和其数组形式。同时,详细介绍了各种过滤器的用途和用法。 ... [详细]
author-avatar
akun
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有