news 2026/5/30 17:55:26

JS:数组

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
JS:数组

1 数组

1.1 对象的分类

  1. 自定义对象:通过五种方式创建的对象
  2. 内建对象:JavaScript 内置的对象,可直接使用其属性和方法,如:
    ArrayBooleanDateMathNumberStringRegExpFunctionEvents
  3. 宿主对象:由运行环境(如浏览器)提供的对象,如windowdocument

1.2 数组的概念

数组是存储有序数据的集合,每个数据称为元素,可存放任意类型数据。它是一种将多个数据存储在单一变量中的优雅方式。

数组是特殊对象,与普通对象区别在于:

  • 普通对象使用字符串作为属性名
  • 数组使用数字索引(从0开始的整数)
  • 数组的存储性能通常优于普通对象

1.3 数组的创建方式

1.3.1 字面量创建(推荐)

let arr = [ "jack", 18, function() { console.log("hello") }, { name: "张三" }, [1, 2, 3, [1, 2, 3]] ]; arr[2](); console.log(arr[3].name); console.log(arr[4][3][2]);

1.3.2 构造函数创建

  1. 创建空数组后赋值
let arr1 = new Array(); arr1[0] = "jack"; arr1[1] = 18; arr1[2] = function() { console.log("hello") }; arr1[3] = { a: 1 }; console.log(arr1);
  1. 直接填充内容
var arr2 = new Array("hello", "你好", 8); console.log(arr2);
  1. 设置初始长度
var a1 = new Array(10); // 10个空位 var a2 = [10]; // 单元素10 console.log(a1, a2);

1.4 数组的基本操作

1.4.1 索引(下标)

访问数组元素的序号(从0开始)

1.4.2 读取元素

语法:数组名[索引]
读取不存在的索引返回undefined

var arr = ["孙悟空", "猪八戒", "沙和尚", "唐僧"]; console.log(arr[0]); // "孙悟空" console.log(arr[999]); // undefined

1.4.3 修改元素

语法:数组[索引] = 值

arr[0] = "玉皇大帝";

1.4.4 获取长度

语法:数组.length

  • 连续数组:元素个数
  • 非连续数组:最大索引+1
console.log(arr.length);

1.4.5 修改length

arr.length = 2; // 截断数组 arr.length = 10; // 扩展空位

1.4.6 末尾添加元素

语法:数组[数组.length] = 值

arr[arr.length] = "玉皇大帝";

1.5 数组检测方法

  1. instanceof
console.log(arr instanceof Array);
  1. Array.isArray(推荐)
console.log(Array.isArray(arr));
  1. Object.prototype.toString.call
console.log(Object.prototype.toString.call(arr)); // [object Array]
  1. constructor(不推荐)
a.constructor = Object; console.log(a.constructor === Object); // 可能误判

1.6 数组遍历

1.6.1 for循环

for (let i = 0; i < arr.length; i++) { console.log(arr[i]); }

1.6.2 优化for循环

for (let i = 0, len = arr.length; i < len; i++) { console.log(arr[i]); }

1.6.3 for...in

for (let i in arr) { console.log(arr[i]); }

1.6.4 for...of

for (let item of arr) { console.log(item); }

1.6.5 forEach

arr.forEach(function(item, index, array) { console.log(item, index); });

1.6.6 map

let arr1 = arr.map(item => item + "!"); console.log(arr1);

1.7 冒泡排序

var arr = [1, 3, 6, 4, 5, 2, 10]; for (let i = 0; i < arr.length - 1; i++) { for (let j = 0; j < arr.length - 1 - i; j++) { if (arr[j] > arr[j + 1]) { [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]]; } } } console.log(arr);

1.8 数组方法

1.8.1 添加/删除元素

方法说明返回值
push()末尾添加新长度
pop()删除末尾被删元素
unshift()开头添加新长度
shift()删除开头被删元素
var arr = ["孙悟空", "沙和尚", "猪八戒"]; arr.push("唐僧"); // 末尾添加 arr.unshift("玉皇大帝"); // 开头添加 let last = arr.pop(); // 删除末尾 let first = arr.shift(); // 删除开头

1.8.2 其他数组方法

  • slice:提取数组片段

    let res = arr.slice(2, -2);
  • indexOf/lastIndexOf/includes:查找元素

    console.log(arr.indexOf("green")); console.log(arr.includes("green"));
  • concat/扩展运算符:合并数组

    console.log(a.concat(b, c)); console.log([...a, ...b, ...c]);
  • join/toString:数组转字符串

    console.log(arr.join("%")); console.log(arr.toString());
  • split:字符串转数组

    console.log(str.split(","));
修改原数组的方法
  • splice:删除/替换元素

    arr.splice(2, 2, 3, 4, 5);
  • reverse:反转数组

    arr.reverse(); console.log(arr);
自定义方法实现
  • 反转原理封装
    Array.prototype.newReverse = function () { for (let i = 0, j = this.length - 1; j > i; j--, i++) { let temp = this[i]; this[i] = this[j]; this[j] = temp; } return this; };
排序相关
  • sort
    // 数字排序 var arr5 = [5, 4, 5, 2, 1, 6, 8, 3]; arr5.sort((a, b) => a - b); // 升序 console.log(arr5); // 随机排序 arr5.sort(() => Math.random() - 0.5); console.log(arr5);
高阶函数
  • filter:过滤元素

    var list = [32, 93, 77, 53, 38, 87]; var pass = list.filter(item => item >= 60); console.log(pass);
  • reduce:数组累加

    var arr = [2, 3, 4, 5]; var sum = arr.reduce((prev, item) => prev + item, 0); console.log(sum);
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/24 2:22:19

mPLUG视觉问答教程:Streamlit状态管理实现历史问答记录与回溯

mPLUG视觉问答教程&#xff1a;Streamlit状态管理实现历史问答记录与回溯 1. 为什么需要记住“上一个问题”&#xff1f;——从单次问答到连续交互的跨越 你有没有试过这样用视觉问答工具&#xff1a;上传一张街景图&#xff0c;问“图里有几辆红色汽车”&#xff0c;得到答案…

作者头像 李华
网站建设 2026/5/29 4:05:06

Qwen-Image-Layered在平面设计中的实际应用案例分享

Qwen-Image-Layered在平面设计中的实际应用案例分享 1. 为什么平面设计师需要“不用抠图的编辑能力” 你有没有过这样的经历&#xff1a;客户发来一张宣传图&#xff0c;要求把LOGO换成新版本、把背景从纯白改成渐变、把文案字体统一调整——但原始文件早已丢失&#xff0c;只…

作者头像 李华
网站建设 2026/5/30 17:47:13

AI净界-RMBG-1.4实战案例:5分钟批量处理100张人像图生成透明PNG

AI净界-RMBG-1.4实战案例&#xff1a;5分钟批量处理100张人像图生成透明PNG 1. 为什么你需要一个真正靠谱的抠图工具 你有没有遇到过这些情况&#xff1f; 电商运营要连夜赶制100张商品主图&#xff0c;每张都得换纯白背景&#xff1b; 设计师接了30张人像海报需求&#xff0…

作者头像 李华
网站建设 2026/5/30 16:09:53

GTE-Pro性能优化教程:显存占用降低35%、吞吐提升2.1倍实操记录

GTE-Pro性能优化教程&#xff1a;显存占用降低35%、吞吐提升2.1倍实操记录 1. 为什么需要优化GTE-Pro&#xff1f;——从“能跑”到“跑得稳、跑得快” 你可能已经成功部署了GTE-Pro&#xff0c;在单条文本上顺利生成了1024维向量。但当真实业务接入——比如每秒要处理200并发…

作者头像 李华
网站建设 2026/5/28 20:25:40

HG-ha/MTools快速部署:Windows WSL2环境下Linux版MTools运行

HG-ha/MTools快速部署&#xff1a;Windows WSL2环境下Linux版MTools运行 1. 为什么要在WSL2里跑Linux版MTools&#xff1f; 你可能已经试过在Windows原生系统上安装MTools&#xff0c;界面确实漂亮&#xff0c;功能也全——但有个现实问题&#xff1a;很多AI工具在Windows下要…

作者头像 李华
网站建设 2026/5/28 16:28:27

光线不均怎么办?科哥镜像自带亮度补偿功能

光线不均怎么办&#xff1f;科哥镜像自带亮度补偿功能 1. 为什么光线不均会让人脸融合效果“翻车” 你有没有试过这样&#xff1a;精心挑了一张帅气的正脸照当源人脸&#xff0c;又选了张风景优美的背景图当目标图像&#xff0c;结果融合出来——人脸一半亮得发白&#xff0c…

作者头像 李华