当前位置: 首页 > news >正文

js数组简介

数组

@jarringslee

声明方式

// 字面量(最常用)
let a = [10, 20, 30];
let aaa = [] //(等后面添加)// Array 构造器(不常用,可读性差)
let b = new Array(10, 20, 30);// 静态方法:把“类数组”或迭代对象变成真数组
let c = Array.from('abc');      // ['a','b','c']
let d = Array.of(3);            // [3]  而不是 new Array(3) 生成空数组

类型 & 特点

说明
动态长度arr.length 可读写,改大留空,改小截断
元素任意数字、字符串、对象、函数、甚至数组套数组
索引从 0 开始,最大索引 = length-1

取值 / 赋值

a[0];      // 10
a[2] = 99; // 改
a[5] = 77; // 自动扩容,中间留空位

数组的修改

想给字符串类型的元素前面或者后面加个什么东西,直接用加号+“拼接"即可。

arr[i] = arr[i] + ‘元’


数组的新增

  • 数组.push() (常用) 将一个或多个元素加到数组末尾,并返回该数组的新长度。

    arr.push(元素1, ..., 元素n)
    //将该函数直接输出,得到数组的新长度。
    let arr = [1, '342r', 'adsa', 3333]
    document.write(arr.push('233', 23132,'d32')) //更新数组内容并输出“7”
    
  • 数组.unshift() 将一个或多个元素加到数组开头,并返回该数组的新长度。

    arr.unshift(元素1, ..., 元素n)
    //使用方法和push相同
    

数组求最值 遍历数组、设置最值变量,不断比较并更新最值即可。


数组的筛选 新建一个数组,遍历原有数组,将符合条件的放入新的数组


数组的删除

  • 数组.pop() 删除一个尾部元素,并返回被删除的元素

  • 数组.shift() 删除一个头部元素,并返回被删除的元素

  • 增删改万能工具 数组.splice() 删除指定的一段元素,并可在该位置添加一段新的元素。

    arr.splice(起始位置index, 要删除几个元素(不删就是0)count(后面可以接新添加的元素1,2,...,n))
    
    • 要是只想添加,那就在第二个位置写0
    • 如果只写了第一个数字,则会把该下标后面的元素全部删除

操作方法是否改变原数组备注
push(...items)末尾追加,返回新长度
unshift(...items)头部追加
splice(index,0,...items)任意位置插入
pop()删末尾,返回被删元素
shift()删头部
splice(index,n)删任意连续 n 个
slice(start,end)返回切片,左闭右开
fill(value,start,end)批量改值
indexOf/lastIndexOf找不到返回 -1
includes(value)布尔版查找
排序sort((a,b)=>a-b)默认字典序,需传比较器
反转reverse()直接倒序
最值Math.max(...arr) / Math.min(...arr)需配合展开运算符

高阶函数

let nums = [3, 1, 4];let doubled = nums.map(n => n * 2);   // [6, 2, 8]
let total   = nums.reduce((s, n) => s + n, 0); // 8
let evens   = nums.filter(n => n % 2 === 0);    // [4]

空位 & 稀疏数组

let arr = [1, , 3];      // 索引 1 是 empty
arr[5] = 6;              // 长度 6,但 2~4 都是 empty

遍历时空位会被 for...offorEach 跳过,但 map 会保留空位。

数组是“动态列表”,push/pop/splice 改长度,map/filter/reduce 玩数据。


简单排序方法 arr.sort()

默认按字符串字典序排序;想按数字大小排,必须给它一个“比较函数”。

默认行为

[3, 21, 7].sort();   // [21, 3, 7]  —— 按字符串比较,'21'<'3'

比较数字:传比较函数

// 升序
arr.sort((a, b) => a - b);
//或者
arr.sort(function (a, b){return a - b})// 降序
arr.sort((a, b) => b - a);
//或者
arr.sort(function (a, b){return b - a})
  • 返回值 < 0:a 排前面
  • 返回值 = 0:顺序不动
  • 返回值 > 0:b 排前面

复杂对象排序示例

const list = [{name:'Tom', age:20}, {name:'Bob', age:15}];
list.sort((x, y) => x.age - y.age);   // 按年龄升序

原地修改 & 返回值

  • 直接改原数组,同时返回排序后的同一数组(不是新数组)。
需求写法示例
随机打乱arr.sort(() => Math.random() - 0.5)
中文拼音arr.sort((a,b)=>a.localeCompare(b,'zh-CN'))

无参字典序,数字记得传函数;升序减,降序反,对象排序取属性。

数组小练习:简单柱形图
通过让用户输入四个季度的数据来生成四个柱形图。
不过还是有很多可以优化的地方:
首先可以让用户输入柱形数量即数组大小,不过html也要灵活布局(比如用flex布局根据比例平均分配空间)。此外,输入高度固定在了html代码中(还没续对象操作传入数据),以后学习了对象可以再运用css知识创建柱形图增长的简单动画。

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>* {margin: 0;padding: 0;}.box {display: flex;width: 700px;height: 300px;border-left: 1px solid lightskyblue;border-bottom: 1px solid lightskyblue;margin: 100px auto;justify-content: space-around;align-items: flex-end;text-align: center;}.box>div {display: flex;width: 50px;background-color: lightskyblue;flex-direction: column;justify-content: space-between;}.box div span {margin-top: -20px;}.box div h4 {margin-bottom: -35px;width: 70px;margin-left: -10px;}</style>
</head><body><script>let arr = []for (let i = 1; i <= 4; i++) {arr.push(prompt(`请输入第${i}季度的数据`))}document.write(`<div class="box">`)for (let i = 1; i <= 4; i++) {document.write(`<div style="height:${arr[i - 1]}px"><span>${arr[i - 1]}</span><h4>第${i}季度</h4></div>`)}document.write(`</div>`)</script>
</body></html>
http://www.dtcms.com/a/282440.html

相关文章:

  • Linux 探秘进程与 fork:从内核源码到容器化演进
  • NLP:LSTM和GRU分享
  • 加速度传感器的用途与应用
  • Opencv---cv::minMaxLoc函数
  • Go与Python在数据管道与分析项目中的抉择:性能与灵活性的较量
  • React 中 props 的最常用用法精选+useContext
  • 单列集合顶层接口Collection
  • QT——事件系统详解
  • YOLOv13_SSOD:基于超图关联增强的半监督目标检测框架(原创创新算法)
  • GaussDB 数据库架构师修炼(五) 存储容量评估
  • 动态规划题解_打家劫舍【LeetCode】
  • MySQL 8.0 OCP 1Z0-908 题目解析(27)
  • 钱包核心标准 BIP32、BIP39、BIP44:从助记词到多链钱包的底层逻辑
  • RocketMQ源码级实现原理-消息过滤与重试
  • 【Deepseek-R1+阿里千问大模型】四步完成本地调用本地部署大模型和线上大模型,实现可视化使用
  • 拥抱主权AI:OpenCSG驱动智能体运营,共筑新加坡智能高地
  • 【技术追踪】基于检测器引导的对抗性扩散攻击器实现定向假阳性合成——提升息肉检测的鲁棒性(MICCAI-2025)
  • 辅助驾驶GNSS高精度模块UM680A外形尺寸及上电与下电
  • 剑指offer64_圆圈中最后剩下的数字
  • 为什么要用erc165识别erc721或erc1155
  • 系统性学习C语言-第十八讲-C语言内存函数
  • IIS-网站报500.19错误代码0x8007000d问题解决
  • LeetCode Hot100【4. 寻找两个正序数组的中位数】
  • 什么是 WebClient?
  • xss-labs的小练
  • 基于faster-r-cnn行人检测和ResNet50+FPN的可见光红外图像多模态算法融合创新
  • VIVADO技巧_BUFGMUX时序优化
  • 比特币技术简史 第二章:密码学基础 - 哈希函数、公钥密码学与数字签名
  • 基于阿里云云服务器-局域网组网软件
  • Mfc初始化顺序