搜索
工艺
理论
配色
案例
思维
重新
经验
分享
外观
理论
结构
模具
硬件
管理
手机
智能
电脑
电器
数码
通讯
交航
家居
穿戴
医美
设备
工具
卡通
开启左侧

数组静态方法_

[复制链接]
admin 发表于 前天 22:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
image.png 我们有一系列关于数组的方法,包括静态方法Array.isArray和实例方法push, pop, shift, unshift, join, concat, reverse, indexOf。
下面将分别解释这些方法,并给出示例。
  • Array.isArray() 静态方法

    • 用于确定传递的值是否是一个数组。
    • 语法:Array.isArray(value)
    • 返回值:如果值是数组,则返回true;否则返回false。

  • push() 方法
    • 向数组的末尾添加一个或多个元素,并返回新的长度。
    • 语法:arr.push(element1, ..., elementN)

  • pop() 方法
    • 从数组中删除最后一个元素,并返回该元素的值。
    • 语法:arr.pop()

  • shift() 方法
    • 从数组中删除第一个元素,并返回该元素的值。
    • 语法:arr.shift()

  • unshift() 方法
    • 向数组的开头添加一个或多个元素,并返回新的长度。
    • 语法:arr.unshift(element1, ..., elementN)

  • join() 方法
    • 将数组(或一个类数组对象)的所有元素连接成一个字符串并返回这个字符串。
    • 语法:arr.join([separator])
    • 分隔符默认为逗号,如果分隔符为空字符串,则元素之间没有任何字符。

  • concat() 方法
    • 用于合并两个或多个数组。此方法不会更改现有数组,而是返回一个新数组。
    • 语法:var new_array = old_array.concat(value1[, value2[, ...[, valueN]]])

  • reverse() 方法
    • 将数组中元素的位置颠倒,并返回该数组。该方法会改变原数组。
    • 语法:arr.reverse()

  • indexOf() 方法

    • 返回在数组中可以找到一个给定元素的第一个索引,如果不存在,则返回-1。
    • 语法:arr.indexOf(searchElement[, fromIndex])


数组方法详解1. Array.isArray() - 静态方法
判断值是否为数组
javascript



// 基本用法console.log(Array.isArray([)); // trueconsole.log(Array.isArray({})); // falseconsole.log(Array.isArray("array")); // falseconsole.log(Array.isArray(new Array())); // true// 与 typeof 对比console.log(typeof [); // "object" - 这不够准确console.log(Array.isArray([)); // true - 更准确// 实际应用function processData(data) {  if (Array.isArray(data)) {    // 处理数组    data.forEach(item => console.log(item));  } else {    // 处理非数组    console.log("数据不是数组");  }}

2. push() 和 pop() - 栈操作
  • push(): 数组末尾添加元素
  • pop(): 数组末尾移除元素

javascript



// push() - 在末尾添加元素,返回新长度let fruits = ["apple", "banana";let newLength = fruits.push("orange", "mango");console.log(fruits); // ["apple", "banana", "orange", "mango"]console.log(newLength); // 4// pop() - 移除最后一个元素,返回该元素let lastFruit = fruits.pop();console.log(lastFruit); // "mango"console.log(fruits); // ["apple", "banana", "orange"]// 栈的应用 - 括号匹配function checkBrackets(str) {  let stack = [;  let pairs = {    ')': '(',    ']': '[',    '}': '{'  };    for (let char of str) {    if (['(', '[', '{'.includes(char)) {      stack.push(char);    } else if ([')', ']', '}'.includes(char)) {      if (stack.pop() !== pairs[char) {        return false;      }    }  }  return stack.length === 0;}console.log(checkBrackets("({[]})")); // true

3. shift() 和 unshift() - 队列操作
  • shift(): 数组开头移除元素
  • unshift(): 数组开头添加元素

javascript



// shift() - 移除第一个元素,返回该元素let queue = ["张三", "李四", "王五";let firstPerson = queue.shift();console.log(firstPerson); // "张三"console.log(queue); // ["李四", "王五"]// unshift() - 在开头添加元素,返回新长度let newLength2 = queue.unshift("赵六", "钱七");console.log(queue); // ["赵六", "钱七", "李四", "王五"]console.log(newLength2); // 4// 队列模拟let taskQueue = [;taskQueue.push("任务1"); // 入队taskQueue.push("任务2");taskQueue.push("任务3");let currentTask = taskQueue.shift(); // 出队console.log("执行:", currentTask); // "执行: 任务1"

4. join() - 数组转字符串
将数组元素连接成字符串
javascript



// 基本用法let arr = ["a", "b", "c";console.log(arr.join()); // "a,b,c" - 默认逗号分隔console.log(arr.join("")); // "abc" - 无分隔符console.log(arr.join("-")); // "a-b-c"console.log(arr.join(" | ")); // "a | b | c"// 实用例子let dateParts = [2023, 12, 15;console.log(dateParts.join("-")); // "2023-12-15"let words = ["Hello", "world", "!";console.log(words.join(" ")); // "Hello world !"// URL路径拼接let pathParts = ["api", "users", "123";let url = "https://example.com/" + pathParts.join("/");console.log(url); // "https://example.com/api/users/123"

5. concat() - 数组合并
合并数组,不改变原数组
javascript



// 基本用法let arr1 = [1, 2;let arr2 = [3, 4;let arr3 = [5, 6;let result1 = arr1.concat(arr2);console.log(result1); // [1, 2, 3, 4]console.log(arr1); // [1, 2] - 原数组不变let result2 = arr1.concat(arr2, arr3);console.log(result2); // [1, 2, 3, 4, 5, 6]// 合并值和数组let result3 = arr1.concat(7, arr2, 8);console.log(result3); // [1, 2, 7, 3, 4, 8]// 浅拷贝数组let original = [{id: 1}, {id: 2};let copy = original.concat();copy[0.id = 99; // 修改引用类型会影响原数组console.log(original[0.id); // 99// 深度拷贝解决方案let deepCopy = original.map(obj => ({...obj}));

6. reverse() - 数组反转
反转数组顺序,会改变原数组
javascript



// 基本用法let numbers = [1, 2, 3, 4, 5;numbers.reverse();console.log(numbers); // [5, 4, 3, 2, 1]// 字符串反转let str = "hello";let reversedStr = str.split("").reverse().join("");console.log(reversedStr); // "olleh"// 创建不改变原数组的反转function reverseArray(arr) {  return arr.concat().reverse();}let arr = [1, 2, 3;let reversed = reverseArray(arr);console.log(arr); // [1, 2, 3] - 原数组不变console.log(reversed); // [3, 2, 1]

7. indexOf() - 查找元素位置
查找元素首次出现的索引
javascript



// 基本用法let fruits = ["apple", "banana", "orange", "banana", "mango";console.log(fruits.indexOf("banana")); // 1console.log(fruits.indexOf("grape")); // -1 (不存在)console.log(fruits.indexOf("banana", 2)); // 3 (从索引2开始查找)// 查找所有匹配的索引function findAllIndexes(arr, value) {  let indexes = [;  let index = arr.indexOf(value);    while (index !== -1) {    indexes.push(index);    index = arr.indexOf(value, index + 1);  }    return indexes;}console.log(findAllIndexes(fruits, "banana")); // [1, 3]// 检查元素是否存在let exists = fruits.indexOf("orange") !== -1;console.log(exists); // true// ES6+ 替代方法:includes() 和 findIndex()console.log(fruits.includes("apple")); // trueconsole.log(fruits.findIndex(fruit => fruit.startsWith("m"))); // 4

综合应用示例javascript



// 购物车管理class ShoppingCart {  constructor() {    this.items = [;  }    addItem(item) {    this.items.push(item);    console.log(`添加了: ${item}`);  }    removeLastItem() {    let removed = this.items.pop();    console.log(`移除了: ${removed}`);    return removed;  }    removeFirstItem() {    let removed = this.items.shift();    console.log(`移除了: ${removed}`);    return removed;  }    addPriorityItem(item) {    this.items.unshift(item);    console.log(`优先添加: ${item}`);  }    getCartSummary() {    return this.items.join(", ");  }    reverseOrder() {    this.items.reverse();    console.log("购物车顺序已反转");  }    findItemIndex(item) {    let index = this.items.indexOf(item);    return index !== -1 ? index : "未找到";  }    combineCart(otherCart) {    this.items = this.items.concat(otherCart.items);    console.log("购物车已合并");  }}// 使用示例let cart = new ShoppingCart();cart.addItem("牛奶");cart.addItem("面包");cart.addItem("鸡蛋");console.log(cart.getCartSummary()); // "牛奶, 面包, 鸡蛋"cart.addPriorityItem("水果");console.log(cart.getCartSummary()); // "水果, 牛奶, 面包, 鸡蛋"console.log(cart.findItemIndex("面包")); // 2console.log(cart.findItemIndex("巧克力")); // "未找到"

方法对比总结


方法
作用
是否改变原数组
返回值

push()末尾添加元素✅ 是新长度
pop()末尾移除元素✅ 是移除的元素
unshift()开头添加元素✅ 是新长度
shift()开头移除元素✅ 是移除的元素
concat()合并数组❌ 否新数组
reverse()反转数组✅ 是原数组(已反转)
join()数组转字符串❌ 否字符串
indexOf()查找元素索引❌ 否索引/-1

注意事项
  • push/pop 操作比 unshift/shift 更快,因为前者不影响其他元素的索引
  • concat() 创建新数组,适合需要保持原数组不变的场景
  • reverse() 会修改原数组,需要时可以先创建副本
  • indexOf() 使用严格相等(===)进行比较



您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright © 2006-2034 精研社
粤ICP备2021041072号-2   Powered by 精远产品设计 Licensed
快速回复 返回顶部 返回列表