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

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);
http://www.jsqmd.com/news/315046/

相关文章:

  • IndexTTS 2.0实测报告:时长控制精确,剪辑更高效
  • MedGemma 1.5企业应用案例:三甲医院科研团队私有化医学知识推理平台
  • Fun-ASR能做字幕生成吗?实际案例告诉你答案
  • Qwen3-VL降本增效指南:弹性GPU+镜像部署节省50%成本
  • 万物识别应用场景揭秘:电商、安防、教育都能用得上
  • ViT图像分类-中文-日常物品快速部署:Jupyter交互式调试技巧分享
  • 用verl优化训练流水线:端到端效率提升方案
  • 告别机械音!用GLM-TTS打造有温度的AI语音
  • MedGemma-X实战案例:教学医院中AI辅助生成标准化实习报告模板
  • 降本增效看得见!麦橘超然替代传统拍摄成本测算
  • DDColor参数调优指南:chroma_weight、luma_weight对最终色彩影响详解
  • Qwen3-4B Instruct-2507多场景:适配RAG检索增强、Function Calling、Tool Use协议
  • 通义千问2.5-7B游戏NPC对话系统:角色扮演部署实战
  • 对比SDXL:Z-Image-Turbo在中文生成上的优势分析
  • Qwen3-1.7B开箱即用教程,无需配置快速体验
  • 【ES】 Elasticsearch在电商系统中的核心应用场景与实践案例
  • Qwen-Image-Edit-F2P效果惊艳:赛博朋克霓虹灯光反射在人脸上的真实渲染
  • Local Moondream2案例展示:动漫角色图像的风格与服饰细节还原
  • GLM-4.6V-Flash-WEB避坑指南:部署与调用必看注意事项
  • PDF-Extract-Kit-1.0GPU算力方案:4090D单卡部署后CPU负载下降60%实测
  • YOLO11真实体验:我用它做了个智能检测系统
  • DeepSeek-R1-Distill-Qwen-1.5B惊艳效果展示:数学推导与编程问答真实对话录
  • 生成画面模糊?Live Avatar画质提升技巧汇总
  • 热门包管理器中存在多个漏洞,JavaScript 生态系统易受供应链攻击
  • Clawdbot效果实测:Qwen3:32B在中文古诗创作+风格迁移+平仄校验Agent中的综合表现
  • 音画同步不再难!IndexTTS 2.0时长控制实测分享
  • upload-labs靶场-第十七关详解
  • 西门子S7-200 PLC与组态王工业锅炉温度控制系统
  • InsightFace人脸分析系统实战:与FastAPI融合,构建RESTful API供Java/Go后端调用
  • Ollama部署ChatGLM3-6B-128K入门指南:支持128K上下文的本地AI考试出题系统