【JavaScript】day24-arrays

作者:mario 发布时间: 2026-08-26 阅读量:7 评论数:0

第二十四天:数组 — 管理一批设备的数据利器

蜗牛往上爬 · 前端工业可视化学习笔记 第 24 篇
昨天用对象建模了一台设备,但大屏上通常有几十上百台设备——这就需要数组。今天学数组的增删改查:push/pop/shift/unshift/splice,以及 indexOf/slice/concat/join/reverse。重点记住:哪些方法会改原数组。


目录


一、数组基础与对象数组

// 字面量创建(推荐)
var devices = ["CNC-001", "AGV-002", "ARM-003"];

// 访问:下标从 0 开始
console.log(devices[0]);                   // "CNC-001"
console.log(devices[devices.length - 1]);  // "ARM-003"(最后一个)
console.log(devices[10]);                  // undefined(越界不报错)

// ⭐ 对象数组:工业大屏的核心数据结构
var deviceList = [
  { id: "CNC-001", name: "数控机床", temp: 65, online: true },
  { id: "AGV-002", name: "搬运机器人", temp: 42, online: true },
  { id: "CNC-004", name: "加工中心", temp: 0, online: false }
];

console.log(deviceList[0].name);    // "数控机床"
console.log(deviceList[2].status);  // undefined(没有 status 属性)

二、增删四兄弟

var devices = ["AGV-002", "ARM-003"];

// push:尾部添加
devices.push("CNC-004");
// ["AGV-002", "ARM-003", "CNC-004"]

// pop:尾部删除(返回被删元素)
var last = devices.pop();  // "CNC-004"

// unshift:头部添加
devices.unshift("CNC-001");
// ["CNC-001", "AGV-002", "ARM-003"]

// shift:头部删除
var first = devices.shift();  // "CNC-001"

记忆口诀

操作

尾部

头部

添加

push

unshift

删除

pop

shift


三、splice:万能增删改

// splice(起始下标, 删除个数, 插入的元素...)
var devices = ["CNC-001", "AGV-002", "ARM-003", "CNC-004"];

// 删除:从下标 1 删 2 个
devices.splice(1, 2);
// ["CNC-001", "CNC-004"]

// 插入:从下标 1 删 0 个,插入新元素
devices.splice(1, 0, "AGV-005");
// ["CNC-001", "AGV-005", "CNC-004"]

// 替换:从下标 0 删 1 个,插入新元素
devices.splice(0, 1, "CNC-009");
// ["CNC-009", "AGV-005", "CNC-004"]

// 实战:删除指定 id 的设备
var idToRemove = "AGV-005";
var index = devices.indexOf(idToRemove);
if (index !== -1) {
  devices.splice(index, 1);  // 找到才删
}

四、查找与截取

var devices = ["CNC-001", "AGV-002", "ARM-003"];

// indexOf:查找下标,找不到返回 -1
console.log(devices.indexOf("ARM-003"));  // 2
console.log(devices.indexOf("XXX"));      // -1

// 判断存在
console.log(devices.indexOf("CNC-001") !== -1);  // true

// slice:截取(不改原数组)
var sub = devices.slice(0, 2);  // 从下标 0 到 2(不含 2)
// ["CNC-001", "AGV-002"]

// concat:合并(不改原数组)
var all = devices.concat(["CNC-004"]);
// 4 个元素

五、join 与 reverse

// join:数组转字符串
var ids = ["CNC-001", "AGV-002", "ARM-003"];
console.log(ids.join(", "));   // "CNC-001, AGV-002, ARM-003"
console.log(ids.join(" | "));  // "CNC-001 | AGV-002 | ARM-003"

// reverse:反转(改原数组!)
var nums = [1, 2, 3, 4, 5];
nums.reverse();
console.log(nums);  // [5, 4, 3, 2, 1]

六、改原数组 vs 不改原数组

这是今天最重要的表格

会修改原数组 ⚠

不修改原数组 ✅

push / pop

slice

shift / unshift

concat

splice

join

reverse

indexOf

不改原数组的方法可以安全地链式调用(如 arr.slice(0, 5).join(","))。改原数组的方法要小心副作用——尤其是在函数里。


七、总结

方法

作用

改原数组?

push / pop

尾部加 / 尾部删

✅ 是

unshift / shift

头部加 / 头部删

✅ 是

splice

删/插/替换

✅ 是

reverse

反转

✅ 是

indexOf

查下标

❌ 否

slice

截取

❌ 否

concat

合并

❌ 否

join

转字符串

❌ 否

🎯 数组的增删改查会了,明天学"高阶方法"——forEach/map/filter/reduce,数据处理的四大神器,外加 JSON。

评论