程序员scholar 程序员scholar
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
npm

(进入注册为作者充电)

  • HTML

  • CSS

  • JavaScript

    • 简介和用法
    • 变量和数据类型
    • 运算符
    • 数据类型转换
    • 选择结构
    • 循环结构
    • 数组
      • 1. 简介
      • 2. 基本用法
      • 3. 定义数组的方式
        • 使用 new Array()
        • 使用数组字面量 []
      • 4. 字符串索引数组
      • 5. 数组常用方法
        • 1. reverse()
        • 2. indexOf()
        • 3. lastIndexOf()
        • 4. join()
        • 5. concat()
        • 6. push()
        • 7. pop()
        • 8. unshift()
        • 9. shift()
        • 10. slice()
        • 11. splice()
        • 12. toString()
        • 13. valueOf()
        • 14. sort()
        • 15. forEach()
      • 6. 二维数组
      • 7. 冒泡排序
    • 数组遍历
    • 函数
    • Debug调试
    • DOM
    • 事件处理
    • BOM(浏览器对象模型)
    • 自定义对象
    • 原型 (Prototype)
    • 内置对象
    • 客户端存储
    • 模块加载方案
  • 前端三剑客
  • JavaScript
scholar
2024-07-19
目录

数组

# 数组

# 1. 简介

数组用于存储一组数据,可以通过索引来访问和操作这些数据。数组在内存中是连续的,便于快速访问。

数组的三要素:

  • 数组名称:用于区分不同的数组。
  • 数组元素:存放在数组中的数据。
  • 元素下标:数组元素的编号,从0开始,通过下标来访问数组元素。

# 2. 基本用法

  1. 创建数组

    var array = new Array();
    
    1
  2. 为数组元素赋值

    array[0] = 'apple';
    
    1
  3. 获取元素值

    var firstElement = array[0];
    
    1

# 3. 定义数组的方式

# 使用 new Array()

  1. 创建一个空数组:

    var array = new Array(); // 创建一个空数组,长度为0
    
    1
  2. 创建一个指定长度的数组:

    var array = new Array(4); // 创建一个长度为4的数组(只填一个数字)
    
    1
    • 注意:即使指定了长度,数组长度也可以自动扩展
  3. 创建一个包含初始元素的数组:

    var array = new Array('apple', 'orange', 'peach', 'banana'); // 创建一个包含初始元素的数组
    
    1

优点

  1. 可以动态地创建数组,可以根据变量值决定数组的长度或内容。
  2. 可以直接创建一个指定长度的空数组。

缺点

  1. 语法稍微冗长,不如字面量简洁。
  2. 创建单元素数组时,如果元素是数字,可能会产生歧义(如 new Array(4) 创建的是长度为4的数组,而不是包含数字4的数组)。

# 使用数组字面量 []

  1. 创建一个空数组:

    var names = []; // 创建一个空数组
    
    1
  2. 创建一个包含初始元素的数组:

    var names = ['apple', 'orange', 'peach', 'banana']; // 创建一个包含初始元素的数组
    
    1

优点

  1. 语法简单、直观,代码更简洁。
  2. 创建数组时不容易产生歧义。

缺点

  1. 无法直接创建一个指定长度的空数组(需要明确指定每个元素的值)。

# 4. 字符串索引数组

默认情况下,数组使用数字作为索引,但也可以使用字符串作为索引,这称为字符串索引数组(或对象)。

  • 字符串索引一般称为 key 键,对应的元素称为 value 值。
  • key 不会对数组的 length 属性产生影响,所以不适合使用普通 for 循环,而应该使用 for...in 或 for...of 循环。

示例:

var obj = [];
obj['name'] = 'John';
obj['age'] = 30;

for (var key in obj) {
    console.log(key + ": " + obj[key]);
}
// 输出:
// name: John
// age: 30
1
2
3
4
5
6
7
8
9
10

# 5. 数组常用方法

方法名 含义
reverse() 将数组元素倒序排列
indexOf() 返回指定元素在数组中第一次出现的位置
lastIndexOf() 返回指定元素在数组中最后一次出现的位置
join() 将数组拼接为字符串
concat() 将多个数组拼接成一个数组
push() 向数组末尾添加一个或多个元素,并返回新的长度
pop() 删除并返回数组的最后一个元素
unshift() 向数组开头添加一个或多个元素,并返回新的长度
shift() 删除并返回数组的第一个元素
slice() 返回数组中指定范围内的元素
splice() 删除元素,并在删除位置添加新的元素,然后返回被删除的元素
toString() 将数组转换为字符串
valueOf() 返回数组对象本身,一般会自动调用
sort() 排序,默认按字符编码的顺序排列,非 string 类型会自动转换为 string,也可以自定义比较规则
forEach() 遍历数组中的每个元素

# 1. reverse()

将数组中的元素倒序排列。

语法:

array.reverse();
1

示例:

var fruits = ['apple', 'orange', 'banana'];
fruits.reverse();
console.log(fruits); // 输出:['banana', 'orange', 'apple']
1
2
3

# 2. indexOf()

返回指定元素在数组中第一次出现的位置。如果数组中不存在该元素,则返回 -1。

语法:

array.indexOf(element);
1

示例:

var fruits = ['apple', 'orange', 'banana'];
console.log(fruits.indexOf('orange')); // 输出:1
console.log(fruits.indexOf('grape')); // 输出:-1
1
2
3

# 3. lastIndexOf()

返回指定元素在数组中最后一次出现的位置。如果数组中不存在该元素,则返回 -1。

语法:

array.lastIndexOf(element);
1

示例:

var fruits = ['apple', 'orange', 'banana', 'orange'];
console.log(fruits.lastIndexOf('orange')); // 输出:3
console.log(fruits.lastIndexOf('grape')); // 输出:-1
1
2
3

# 4. join()

将数组的所有元素拼接成一个字符串。

语法:

array.join(separator);
1

示例:

var fruits = ['apple', 'orange', 'banana'];
console.log(fruits.join(', ')); // 输出:"apple, orange, banana"
1
2

# 5. concat()

将多个数组拼接成一个新的数组,不改变原数组。

语法:

array.concat(array1, array2, ...);
1

示例:

var fruits = ['apple', 'orange'];
var moreFruits = ['banana', 'peach'];
var allFruits = fruits.concat(moreFruits);
console.log(allFruits); // 输出:['apple', 'orange', 'banana', 'peach']
1
2
3
4

# 6. push()

向数组末尾添加一个或多个元素,并返回数组的新长度。

语法:

array.push(element1, element2, ...);
1

示例:

var fruits = ['apple', 'orange'];
var newLength = fruits.push('banana', 'peach');
console.log(fruits); // 输出:['apple', 'orange', 'banana', 'peach']
console.log(newLength); // 输出:4
1
2
3
4

# 7. pop()

删除并返回数组的最后一个元素。

语法:

array.pop();
1

示例:

var fruits = ['apple', 'orange', 'banana'];
var lastFruit = fruits.pop();
console.log(fruits); // 输出:['apple', 'orange']
console.log(lastFruit); // 输出:'banana'
1
2
3
4

# 8. unshift()

向数组开头添加一个或多个元素,并返回数组的新长度。

语法:

array.unshift(element1, element2, ...);
1

示例:

var fruits = ['apple', 'orange'];
var newLength = fruits.unshift('banana', 'peach');
console.log(fruits); // 输出:['banana', 'peach', 'apple', 'orange']
console.log(newLength); // 输出:4
1
2
3
4

# 9. shift()

删除并返回数组的第一个元素。

语法:

array.shift();
1

示例:

var fruits = ['apple', 'orange', 'banana'];
var firstFruit = fruits.shift();
console.log(fruits); // 输出:['orange', 'banana']
console.log(firstFruit); // 输出:'apple'
1
2
3
4

# 10. slice()

返回数组中指定范围内的元素,不改变原数组。

语法:

array.slice(start, end);
1

示例:

var fruits = ['apple', 'orange', 'banana', 'peach'];
var citrus = fruits.slice(1, 3);
console.log(citrus); // 输出:['orange', 'banana']
console.log(fruits); // 输出:['apple', 'orange', 'banana', 'peach']
1
2
3
4

# 11. splice()

删除数组中的元素,并在删除位置添加新的元素,然后返回被删除的元素。

语法:

array.splice(start, deleteCount, item1, item2, ...);
1

示例:

var fruits = ['apple', 'orange', 'banana'];
var removedFruits = fruits.splice(1, 1, 'peach', 'grape');
console.log(fruits); // 输出:['apple', 'peach', 'grape', 'banana']
console.log(removedFruits); // 输出:['orange']
1
2
3
4

# 12. toString()

将数组转换为字符串。

语法:

array.toString();
1

示例:

var fruits = ['apple', 'orange', 'banana'];
console.log(fruits.toString()); // 输出:"apple,orange,banana"
1
2

# 13. valueOf()

返回数组对象本身,一般会自动调用。

语法:

array.valueOf();
1

示例:

var fruits = ['apple', 'orange', 'banana'];
console.log(fruits.valueOf()); // 输出:['apple', 'orange', 'banana']
1
2

# 14. sort()

排序数组,默认按字符编码的顺序排列,非 string 类型会自动转换为 string,也可以自定义比较规则。

语法:

array.sort(compareFunction);
1

示例:

var fruits = ['banana', 'apple', 'peach'];
fruits.sort();
console.log(fruits); // 输出:['apple', 'banana', 'peach']

// 自定义比较规则
var numbers = [4, 2, 5, 1, 3];
numbers.sort(function(a, b) {
    return a - b;
});
console.log(numbers); // 输出:[1, 2, 3, 4, 5]
1
2
3
4
5
6
7
8
9
10

# 15. forEach()

遍历数组中的每个元素。

语法:

array.forEach(function(currentValue, index, array) {
    // 循环操作
});
1
2
3

示例:

var fruits = ['apple', 'orange', 'banana'];
fruits.forEach(function(fruit, index) {
    console.log(index + ": " + fruit);
});
// 输出:
// 0: apple
// 1: orange
// 2: banana
1
2
3
4
5
6
7
8

# 6. 二维数组

二维数组可以看作是数组的数组,即每个元素也是一个数组。

示例:

var matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
];

console.log(matrix[0][1]); // 2
console.log(matrix[2][2]); // 9
1
2
3
4
5
6
7
8

# 7. 冒泡排序

冒泡排序是一种简单的排序算法,通过比较相邻的元素并交换位置来排序。

基本思想:

  • 比较相邻的元素,如果第一个比第二个大,就交换它们的位置(升序)。
  • 针对所有元素重复以上的步骤,直到没有任何一对数字需要交换。

示例:

var array = [5, 3, 8, 4, 2];

for (var i = 0; i < array.length - 1; i++) {
    for (var j = 0; j < array.length - 1 - i; j++) {
        if (array[j] > array[j + 1]) {
            var temp = array[j];
            array[j] = array[j + 1];
            array[j + 1] = temp;
        }
    }
}

console.log(array); // [2, 3, 4, 5, 8]
1
2
3
4
5
6
7
8
9
10
11
12
13

总结:

  • 冒泡排序的时间复杂度为 O(n^2),其中 n 是数组的长度。
  • 适用于数据量较小的情况,数据量大时效率较低。
编辑此页 (opens new window)
上次更新: 2025/01/25, 22:32:05
循环结构
数组遍历

← 循环结构 数组遍历→

Theme by Vdoing | Copyright © 2019-2025 程序员scholar
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式