JavaScript- 2.6 数组应用

本系列可作为前端学习系列的笔记,代码的运行环境是在HBuilder中,小编会将代码复制下来,大家复制下来就可以练习了,方便大家学习。

HTML和CSS系列文章 已经收录在前端专栏,有需要的宝宝们可以点击前端专栏查看!

点赞关注不迷路!您的点赞、关注和收藏是对小编最大的支持和鼓励! 

系列文章目录 

JavaScript- 1.1 行内、内部、外部三种引用方式

JavaScript- 1.2 ECMA基本语法和控制流

JavaScript- 1.3 DOM对页面内容进行操作

JavaScript- 1.4 BOM对浏览器进行操作

JavaScript- 1.5 数据类型+变量+运算符

JavaScript- 1.6 基本控制流

JavaScript- 2.1 系统函数和自定义函数

JavaScript- 2.2 内置对象MATH

JavaScript- 2.3 内置对象String

JavaScript- 2.4 内置对象Date

JavaScript- 2.5 内置对象ARRAY 

JavaScript- 2.6 数组应用 

JavaScript- 2.7 二维数组

JavaScript- 3.1 定时器函数 window.settimeout & window.settinterval 

JavaScript- 3.2 JavaScript实现不同显示器尺寸的响应式主题和页面 

JavaScript- 4.1 DOM-document对象 

JavaScript- 4.2  DOM--定位元素

JavaScript- 4.3  轮播图实现指南


目录

系列文章目录 

前言

一、JavaScript 数组应用详解

一、基础数据存储与操作

1. 存储有序数据

2. 批量处理数据

二、常用应用场景

1. 栈(Stack)实现

2. 队列(Queue)实现

3. 矩阵表示

三、高级应用场景

1. 数据转换与聚合

2. 查找与过滤

3. 排序与分组

四、性能优化技巧

1. 预分配数组大小

2. 使用正确的遍历方法

3. 避免不必要的数组操作

五、特殊应用场景

1. 环形缓冲区实现

2. 多维数组模拟

六、现代JavaScript中的数组应用

1. 解构赋值

2. 展开运算符

3. 数组空位处理

七、最佳实践建议

 二、代码实践

总结


前言

小编作为新晋码农一枚,会定期整理一些写的比较好的代码,作为自己的学习笔记,会试着做一下批注和补充,如转载或者参考他人文献会标明出处,非商用,如有侵权会删改!欢迎大家斧正和讨论!

一、JavaScript 数组应用详解

数组是 JavaScript 中最基础且强大的数据结构之一,广泛应用于各种场景。下面从多个角度详细讲解数组的实际应用。

一、基础数据存储与操作

1. 存储有序数据

javascript

// 存储用户ID列表
let userIds = [101, 102, 103, 104];

// 存储商品价格
let prices = [19.99, 29.99, 39.99, 49.99];

2. 批量处理数据

javascript

// 批量计算平方
let numbers = [1, 2, 3, 4, 5];
let squares = numbers.map(num => num * num); // [1, 4, 9, 16, 25]

// 批量过滤偶数
let evens = numbers.filter(num => num % 2 === 0); // [2, 4]

二、常用应用场景

1. 栈(Stack)实现

javascript

let stack = [];

// 入栈
stack.push('A');
stack.push('B');
stack.push('C');

// 出栈
let last = stack.pop(); // 'C'
console.log(stack); // ['A', 'B']

2. 队列(Queue)实现

javascript

let queue = [];

// 入队
queue.push('Task 1');
queue.push('Task 2');
queue.push('Task 3');

// 出队
let first = queue.shift(); // 'Task 1'
console.log(queue); // ['Task 2', 'Task 3']

3. 矩阵表示

javascript

// 2x3 矩阵
let matrix = [
  [1, 2, 3],
  [4, 5, 6]
];

// 访问元素
console.log(matrix[1][2]); // 6

三、高级应用场景

1. 数据转换与聚合

javascript

let orders = [
  {id: 1, amount: 100, category: 'Electronics'},
  {id: 2, amount: 200, category: 'Clothing'},
  {id: 3, amount: 150, category: 'Electronics'},
  {id: 4, amount: 50, category: 'Food'}
];

// 按类别汇总金额
let totals = orders.reduce((acc, order) => {
  acc[order.category] = (acc[order.category] || 0) + order.amount;
  return acc;
}, {});

console.log(totals);
// {
//   Electronics: 250,
//   Clothing: 200,
//   Food: 50
// }

2. 查找与过滤

javascript

let products = [
  {id: 1, name: 'Laptop', inStock: true},
  {id: 2, name: 'Phone', inStock: false},
  {id: 3, name: 'Tablet', inStock: true}
];

// 查找第一个有货商品
let firstAvailable = products.find(p => p.inStock);
console.log(firstAvailable.name); // 'Laptop'

// 过滤所有有货商品
let availableProducts = products.filter(p => p.inStock);
console.log(availableProducts.map(p => p.name)); // ['Laptop', 'Tablet']

3. 排序与分组

javascript

let students = [
  {name: 'Alice', score: 85},
  {name: 'Bob', score: 92},
  {name: 'Charlie', score: 78},
  {name: 'David', score: 92}
];

// 按分数降序排序
students.sort((a, b) => b.score - a.score);

// 按分数分组
let grouped = students.reduce((acc, student) => {
  let score = student.score;
  if (!acc[score]) acc[score] = [];
  acc[score].push(student);
  return acc;
}, {});

console.log(grouped);
/*
{
  92: [
    {name: 'Bob', score: 92},
    {name: 'David', score: 92}
  ],
  85: [{name: 'Alice', score: 85}],
  78: [{name: 'Charlie', score: 78}]
}
*/

四、性能优化技巧

1. 预分配数组大小

javascript

// 预分配1000个元素的数组
let largeArray = new Array(1000);

// 填充数据(比push更快)
for (let i = 0; i < 1000; i++) {
  largeArray[i] = i * 2;
}

2. 使用正确的遍历方法

javascript

let arr = new Array(1000000).fill(0);

// 慢:forEach
console.time('forEach');
arr.forEach(x => {});
console.timeEnd('forEach'); // 约5ms

// 快:for循环
console.time('for');
for (let i = 0; i < arr.length; i++) {}
console.timeEnd('for'); // 约0.5ms

// 更快:缓存length
console.time('for cached');
for (let i = 0, len = arr.length; i < len; i++) {}
console.timeEnd('for cached'); // 约0.3ms

3. 避免不必要的数组操作

javascript

// 不好的做法 - 每次循环都创建新数组
let result = [];
for (let i = 0; i < 1000; i++) {
  result = result.concat([i]); // 每次循环都创建新数组
}

// 好的做法 - 先收集元素,最后一次性处理
let temp = [];
for (let i = 0; i < 1000; i++) {
  temp.push(i);
}
let result = temp; // 或进一步处理

五、特殊应用场景

1. 环形缓冲区实现

javascript

class CircularBuffer {
  constructor(size) {
    this.buffer = new Array(size);
    this.size = size;
    this.start = 0;
    this.count = 0;
  }

  push(value) {
    const index = (this.start + this.count) % this.size;
    this.buffer[index] = value;
    if (this.count < this.size) {
      this.count++;
    } else {
      this.start = (this.start + 1) % this.size;
    }
  }

  getValues() {
    const values = [];
    for (let i = 0; i < this.count; i++) {
      const index = (this.start + i) % this.size;
      values.push(this.buffer[index]);
    }
    return values;
  }
}

// 使用示例
const cb = new CircularBuffer(3);
cb.push(1);
cb.push(2);
cb.push(3);
cb.push(4); // 会覆盖第一个元素
console.log(cb.getValues()); // [2, 3, 4]

2. 多维数组模拟

javascript

// 模拟二维数组(矩阵)
let matrix = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]
];

// 访问元素
console.log(matrix[1][2]); // 6

// 遍历矩阵
for (let i = 0; i < matrix.length; i++) {
  for (let j = 0; j < matrix[i].length; j++) {
    console.log(`matrix[${i}][${j}] = ${matrix[i][j]}`);
  }
}

六、现代JavaScript中的数组应用

1. 解构赋值

javascript

let colors = ['red', 'green', 'blue'];
let [first, second] = colors;
console.log(first); // 'red'
console.log(second); // 'green'

// 交换变量
let a = 1, b = 2;
[a, b] = [b, a];
console.log(a, b); // 2 1

2. 展开运算符

javascript

let arr1 = [1, 2, 3];
let arr2 = [...arr1, 4, 5]; // [1, 2, 3, 4, 5]

// 合并数组
let fruits = ['apple', 'banana'];
let moreFruits = ['orange', ...fruits, 'grape']; // ['orange', 'apple', 'banana', 'grape']

// 函数参数
function sum(a, b, c) {
  return a + b + c;
}
let nums = [1, 2, 3];
console.log(sum(...nums)); // 6

3. 数组空位处理

javascript

// ES5中空位会被跳过
let arr = [1, , 3];
console.log(arr.length); // 3
console.log(arr[1]); // undefined

// ES6中明确空位处理
let newArr = [1, ...[], 3]; // 相当于[1, 3]
console.log(newArr.length); // 2

七、最佳实践建议

  1. 选择合适的方法:根据操作类型选择合适的方法(如查找用find,过滤用filter,聚合用reduce
  2. 避免滥用数组:对于固定大小的键值对数据,使用对象或Map可能更合适
  3. 注意性能:处理大数据量时,考虑使用for循环而非高阶函数
  4. 利用现代特性:合理使用展开运算符、解构赋值等简化代码
  5. 保持不可变性:优先使用mapfilter等返回新数组的方法,而非直接修改原数组

数组是JavaScript编程的核心数据结构,掌握其各种应用场景和技巧可以显著提高代码的效率和可读性。

 二、代码实践

代码如下:

HTML

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>数组应用</title>
	</head>
	<body>
		<!--   a.1-100中能被7整除的放入数组中
		    b.从1-100包括100中取10个随机整数放入数组中
		    c.将上面随机生成的10个数按照奇数偶数分开两个数组
		    e.1-100随机生成10个数,并排序 -->
			<script type="text/javascript">
				//a.1-100中能被7整除的放入数组中
				var myArray=new Array();
				var myArray1=new Array();//偶数
				var myArray2=new Array();//奇数
				for(var i=1;i<=100;i++){
					if(i%2===0){
						myArray1[myArray1.length]=i;
					}else{
						myArray2[myArray2.length]=i;
					}
				}
				console.log(myArray1);
				console.log(myArray2);
				//b.从1-100包括100中取10个随机整数放入数组中
				//c.将上面随机生成的10个数按照奇数偶数分开两个数组
				var myArray3=new Array();//奇数
				var myArray4=new Array();//偶数
				for(var i=0;i<10;i++){
					var myRam=parseInt((100-1+1)*Math.random()+1);//生成随机数
					myArray[myArray.length]=myRam;//把随机数放入数组中
					if(myRam%2===0){
						myArray3[myArray3.length]= myRam;
					}else{
						myArray4[myArray4.length]= myRam;
					}
				}
				console.log(myArray);
				console.log(myArray3);
				console.log(myArray4);
				//e.并排序 冒泡
				for(var i=0;i<myArray.length-1;i++){//控制几趟
					for(var j=0;j<myArray.length-1-i;j++){//每一趟比几个数
					if(myArray[j]>myArray[j+1]){
						var temp=myArray[j];//把大数放在temp中
						myArray[j]=myArray[j+1];//小数放进j位置
						myArray[j+1]=temp;//大数放进j+1位置
						}
					}
				}
				console.log(myArray);
			</script>
	</body>
</html>

代码运行如下:


总结

以上就是今天要讲的内容,本文简单记录了数组应用 ,仅作为一份简单的笔记使用,大家根据注释理解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yvonne爱编码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值