数组对象的创建及应用

本文详细介绍了JavaScript中数组的创建、检测、添加删除元素、排序、索引方法及去重技巧。通过实例展示了如何使用字面量和newArray()创建数组,利用instanceof和Array.isArray()判断数组类型,以及运用push、unshift、pop、shift方法操作数组元素。此外,还讲解了如何实现数组的冒泡排序和使用indexOf、lastIndexOf获取数组元素索引。最后,通过一个去重函数unique实现了数组去重功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数组对象

5.1数组对象的创建

创建数组对象的两种方式

  • 字面量方式
  • new Array()
<script>
        //创建数组的两种方式
        //1. 利用数组字面量
        var arr = [1,2,3];
        console.log(arr[0]);

        //2.利用new Array()
        //var arr1 = new Array();   //创建了一个空数组
        //var arr1 = new Array(2);  //这个2表示 数组的 长度为2 里面有两个空数组
        var arr1 = new Array(2,3);  //等价于[2,3]   这样写表示  里面有2个数组元素 是2和3
        console.log(arr1);
    </script>

5.2检测是否为数组

(1)instanceof 运算符 他可以用来检测是否为数组
(2)Array.isArray(参数);H5新增的方法 ie9以上版本支持

<script>
        //翻转数组
        function reverse(arr){
            if (arr instanceof Array){
                var newArr = [];
                for(var i = arr.length - 1; i>=0; i--){
                newArr[newArr.length] = arr[i];

                }
                return newArr;
            }else{
                 return 'error 这个参数要求必须是数组格式[1,2,3]'
            }
        }
        console.log(reverse([1,2,3]));
        console.log(reverse(1,2,3));
        //检测是否为数组
        //(1)instanceof 运算符 他可以用来检测是否为数组
        var arr = [];
        var obj = {};
        console.log(arr instanceof Array);
        console.log(obj instanceof Array);
        //(2)Array.isArray(参数);H5新增的方法 ie9以上版本支持
        console.log(Array.isArray(arr));
        console.log(Array.isArray(obj));

    </script>

5.3添加删除数组元素的方法

在这里插入图片描述

<script>
        var arr = [1,2,3];
        // (1) push是可以给数组后面追加新的元素
        //arr.push(4, 'pink');
        console.log(arr.push(4, 'pink'));

        console.log(arr);
        // (1) push是可以给数组后面追加新的元素
        // (2) push() 参数直接写数组元素就可以了
        // (3) push完毕之后,返回的结果是新数组的长度
        // (4) 原数组也会发生变化

        // 2. unshift 在我们数组的开头添加一个或者多个数组元素
        console.log(arr.unshift('red','purple'));
        console.log(arr);
        // (1) unshift是 可以给数组前面追加新的元素
        // (2) unshift() 参数直接写数组元素就可以了
        // (3) unshift完毕之后,返回的结果是新数组的长度
        // (4)原数组也会发生变化

        //3. pop() 他可以删除数组的最后一个元素
        console.log(arr.pop());
        console.log(arr);
        // (1) pop是 可以删除数组的最后一个元素 记住一次只能删除一个元素
        // (2) pop() 没有参数
        // (3) pop完毕之后,返回的结果是 删除的那个元素
        // (4)原数组也会发生变化

         //4. shift() 他可以删除数组的第一个元素
         console.log(arr.shift());
         console.log(arr);
        // (1) shift是 可以删除数组的第一个元素 记住一次只能删除一个元素
        // (2) shift() 没有参数
        // (3) shift完毕之后,返回的结果是 删除的那个元素
        // (4)原数组也会发生变化
        
    </script>

筛选数组中的元素

<script>
        //有一个包含工资的数组[1500,1200,2000,2100 ,1800],
        // 要求把数组中工资超过2000的删除,剩余的放到新数组里面
        var arr = [1500,1200,2000,2100,1800,1530];
        var newArr = [];
        for(var i =0; i < arr.length; i++){
            if(arr[i] < 2000){
                newArr.unshift(arr[i]);
            }
        }
        console.log(newArr);
</script>

5.4数组排序

在这里插入图片描述

 <script>
        //数组排序
        //1.翻转数组
        var arr = ['pink','red','blue'];
        arr.reverse();
        console.log(arr);

        //2.数组排序(冒泡排序)
        var arr1 = [12,13,4,7,1];
        arr1.sort(function(a,b){
            return a - b; //升序的顺序排列
            // return b - a; //降序的顺序排列
        });
        console.log(arr1);
    </script>

5.5数组索引方法

在这里插入图片描述

<script>
    // 返回数组元素索引号方法indexOf( 数组元素)作用 
    // 就是返回该数组元素的索引号 从前面开始查找
    // 它只返回第一个满足条件的索引号
    // 它如果在该数组里面找不到元素,则返回的是-1
    var arr = ['red','green','pink'];
    console.log(arr.indexOf('blue'));

    // 返回数组元素索引号方法lastIndexOf( 数组元素)作用 
    // 就是返回该数组元素的索引号 从后面开始查找
    var arr = ['red','green','blue','pink','blue'];
    
    console.log(arr.lastIndexOf('blue'));   //4
</script>

数组去重案例

案例分析:

目标:把旧数组里面不重复的元素选取出来放到新数组中,重复的元素只保留-个,放到新数组中去重。

核心算法:我们遍历旧数组,然后拿着I8数组元素去查询新数组,如果该元素在新数组里面没有出现过,我们就添加,否则不添加。

我们怎么知道该元素没有存在?利用新数组.indexOf(数组元素)如果返回时-1就说明新数组里面没有改元素

<script>
        // 封装一个 去重的函数 unique 独一无二的
        function unique(arr){
            var newArr = [];
            for(var i =0; i<arr.length; i++){
                if(newArr.indexOf(arr[i])===-1){
                    newArr.push(arr[i]);
                }
            }
            return newArr;
        }
        var demo = unique(['blue','geen','blue'])
        console.log(demo);
    </script>

5.6数组转化为字符串

在这里插入图片描述

 <script>
        //数组转换为字符串
        // 1.toString() 将我们的数组转换为字符串
        var arr = [1,2,3];
        console.log(arr.toString());    //1,2,3
        //2.join(分隔符)
        var arr1=['gren','gyq','pink'];
        console.log(arr1.join());   //green,blue,pink
        console.log(arr1.join('-'));   //green-blue-pink
        console.log(arr1.join('&'));   //green&blue&pink
    </script>

5.7拓展
在这里插入图片描述

<think>嗯,用户想了解对象数组的定义及应用。首先,我需要明确对象数组是什么。对象数组,应该是指由对象构成的数组,每个元素都是一个对象实例。比如在编程中,比如Java或JavaScript里,对象数组很常见。 接下来,我应该从定义开始。对象数组和普通数组的区别在于,普通数组存储基本数据类型,而对象数组存储的是对象的引用。比如在Java中,定义一个类Person,然后创建Person[] people = new Person[5]; 每个元素都是Person对象。 然后应用方面,需要举例说明。比如管理系统中的学生对象、图书对象等,用数组来存储这些对象,便于批量操作。比如遍历数组调用方法,或者进行排序、搜索等操作。 要注意用户可能对编程概念不太熟悉,所以例子要简单明了。可能需要提到内存结构,对象数组在内存中存储的是引用,而对象本身在堆内存中。这点可能对理解有帮助。 另外,用户可能想知道如何初始化对象数组,比如在JavaScript中如何创建包含多个对象数组,并访问属性。或者在不同语言中的语法差异,比如Java和Python的区别。 还要考虑应用场景的实际例子,比如游戏中的角色数组,每个角色对象包含属性如生命值、位置等。或者Web开发中的用户数据列表,用对象数组来渲染界面。 可能需要注意用户是否混淆了对象数组和其他数据结构,比如列表或集合。可以简单对比,说明数组的固定长度和直接访问的特性,而对象数组适合已知数量的元素集合。 总结时,要强调对象数组的优势:结构化数据存储、便于管理、支持复杂操作。同时也要提到可能的局限性,比如固定长度,在动态扩容时的不足,从而引出其他数据结构的选择。 需要确保语言口语化,避免过于技术化的术语,但又要准确。检查是否符合之前的系统级指令,比如数学公式的正确使用,但这个问题可能不涉及太多数学内容,不过如果有提到算法比如排序,可能需要用LaTeX表达,比如时间复杂度O(n^2)等,但用户的问题可能不需要,所以可能不用。 最后,结构要清晰,分点回答定义、语法示例、应用场景、注意事项等部分,帮助用户逐步理解。</think>### 对象数组的定义及应用分步解析 #### 一、定义 1. **基本概念** 对象数组是由**对象实例**构成的数组,其元素存储的是对象的**引用地址**而非基本数据类型值。 - 普通数组示例(基本类型):`int[] numbers = {1, 2, 3};` - 对象数组示例(引用类型):`Student[] students = new Student[3];` 2. **内存结构** ``` +-------------------+ | 对象数组 students | +-------------------+ | [0] → Student对象A | | [1] → Student对象B | | [2] → Student对象C | +-------------------+ ``` 数组元素指向堆内存中的实际对象实例。 --- #### 二、语法示例 ##### 1. Java 中的对象数组 ```java // 定义类 class Student { String name; int age; } // 创建对象数组 Student[] students = new Student[3]; // 初始化对象元素 students[0] = new Student(); students[0].name = "张三"; students[0].age = 18; ``` ##### 2. JavaScript 中的对象数组 ```javascript const books = [ { title: "JavaScript指南", price: 99 }, { title: "算法导论", price: 128 } ]; console.log(books[1].title); // 输出:算法导论 ``` --- #### 三、典型应用场景 1. **数据集合管理** - 学生管理系统:存储学生对象,包含学号、成绩等属性 - 电商购物车:存储商品对象,记录商品名称、价格、数量 2. **批量操作** ```java for (Student s : students) { s.calculateGPA(); // 遍历调用对象方法 } ``` 3. **算法处理** - 按属性排序(例如按年龄排序学生) - 过滤数据(例如筛选价格低于100元的商品) --- #### 四、注意事项 1. **初始化问题** 需显式为每个数组元素分配内存: ```java // 错误:未初始化直接使用会抛出 NullPointerException students[0].name = "张三"; // 正确:先实例化对象 students[0] = new Student(); ``` 2. **与集合类的对比** | 特性 | 对象数组 | ArrayList(Java) | |-------------|------------------|-----------------------| | 长度 | 固定 | 动态扩展 | | 访问效率 | $O(1)$ | $O(1)$ | | 插入/删除效率 | $O(n)$ | 尾部操作$O(1)$,中间$O(n)$ | 3. **适用场景** - 需高性能随机访问时优先用数组 - 需频繁增删元素时改用 `List` 或 `LinkedList` --- #### 五、扩展应用示例 **游戏角色管理系统** ```python class Character: def __init__(self, name, hp): self.name = name self.hp = hp # 创建角色对象数组 characters = [ Character("战士", 100), Character("法师", 80) ] # 遍历处理战斗逻辑 for char in characters: char.hp -= 10 # 所有角色生命值减少10 ``` --- ### 总结 对象数组通过结构化存储数据,显著提升代码可维护性,适用于需要**快速访问**和**批量处理对象**的场景,但需注意其长度固定性是否满足
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑马金牌编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值