JS数据结构 数组篇详解

这里写目录标题

定义

数组是存放在连续内存空间上的相同类型数据的集合。

连续内存空间

在C、C++、Java 等语言中数组的实现是要求数组固定长度的,在数组的定义中我们也可以知道,因为要求数组在空间中是连续存储的,所以数组就肯定是定长的。

因为内存不知道数组还要不要继续存放,还要使用多长的空间,如果不是固定长度,那么内存中位于数组之后的区域会没办法分配。

相同类型数据

因为数组长度是固定的,如果不是相同数据类型,一会存 int ,一会存String ,两种不同长度的数据类型,不能保证各自存放几个,这样有悖固定长度的规定,所以也要是相同的数据类型。

JS中的数组特殊的地方

但是如下图所示,在JS中数组好像不遵循一般意义上的数组定义,既可以存储不同类型的数据,也可以随意改变长度,增删元素。
在这里插入图片描述
在这里插入图片描述

原因

实际上是JS的源码在底层上对做了一层封装,这里博主就不具体具体展开对源码进行分析了,具体可以看这个链接: 探究JS V8引擎下的“数组”底层实现

在这里大家只需要知道,JS中的数组和普通意义上的数组不同,可以定义不同类型并且能随意改变长度,这也是JS中数组有那么多API方法的原因,接下来我会详细介绍JS数组的API

数组常用API(push prp shift unshift splice sort concat)

创建数组

        // 创建数组
            let arr = new Array(1,2,3)

            let arr2 = [3,4,5]

接下来的操作都是对这里创建的 arr 进行的

1,push (在数组末尾添加一个元素)

            arr.push(4)   // 1,2,3,4

2,prp (弹出数组末尾的一个元素)

            arr.prp()    // 返回值 4 原数组 1,2,3

3,shift(在数组前弹出一个元素)

            arr.shift() // 返回值 1 原数组 2,3

4,unshift(在数组前添加一个元素)

            arr.unshift(1) // 1,2,3

5,splice(在任意位置插入和删除)

            arr.splice(0,2,5)  //从下标0开始删除两个元素并添加 5  //5,3

6,sort(排序数组)

            let arr = [3,2,4,6,5];
            arr.sort((x,y) => x - y)  //正序排序 2,3,4,5,6
            arr.sort((x,y) => y - x)  //倒序排序 6,5,4,3,2
			
			//也可以对对象进行排序
			 let arr = [
                    {
    
    
                  name:'张三',
                  age:100
                },
                    {
    
    
                  name:'李四',
                  age:18
                },
                    {
    
    
                  name:'王五',
                  age:20
                }
            ]

            arr.sort((x,y)=>x.age-y.age) //对对象进行以age的正序排序

7,concat(合并数组)

                let arr1 = [1,2,3]
                let arr2 = [4,5,6]

                arr1.concat(arr2) //1,2,3,4,5,6
                arr1.concat(arr2,7,8,9) //1,2,3,4,5,6,7,8,9

8,slice(分割 从下标为几开始分割几个)

        let arr = [11,12,13,11]

        console.log(arr.slice(1)); //12,13,11   只写一个就分割到最后
        console.log(arr.slice(0,3)); //11,12,13
        console.log(arr.slice(-2)); //13,11  如果是负数  就是从下标为倒几开始,分割几个

数组其他API

迭代方法 (every, some, filter, map, forEach, reduce,entries)

1, every (数组所有都满足才返回true 否则 false)

                let arr = [11,12,13,14]
                console.log(arr.every(item => item > 10));  //true

2, some(数组有一个满足就返回 true 否则false)

                  console.log(arr.some(item => item > 13));   //true

3, filter(过滤 返回符合条件的元素)

                console.log(arr.filter(item => item > 12));  // 13,14

4, map(映射 方法用于数组转换。它接受另一个自定义函数作为参数,并在每个数组项上应用该函数。)

                console.log(arr.map(item => item + 'ccy')); //数组中每个元素都执行方法体     
                11ccy,12ccy。。。

5, forEach(遍历)

         arr.forEach( item => {
    
      //11, 12 ,13, 14
            console.log(item);
        } )

        // 返回索引值的遍历
        arr.forEach( (item,index) => {
    
     //11 0 , 12 1 , 13 2 , 14 3
            console.log(item,index);
        } )

6, reduce(累加,累乘 之类的操作)

        console.log(arr.reduce( (item1,item2) => item1 + item2 ));  
        //50 过程 11 + 12 = 23 -> 23 + 13 = 36... item1是得出的那个数 item2为下一个数组的数

        console.log(arr.reduce( (item1,item2) => item1 * item2 ));  //24024

7, entries(迭代器对象)

        for(let i of arr.entries()){
    
       //[0, 11],[1, 12],[1, 12],[1, 12]
            console.log(i);
        }

        for(let i of arr.keys()){
    
       //0,1,2,3
            console.log(i);
        }
        
        for(let i of arr.values()){
    
       //11,12,13,14
            console.log(i);
        }

搜索(indexOf ,lastIndexOf , find , findIndex , findLast ,findLastIndex ,includes)

        // let arr = [11,12,13,14]

1, indexOf(从头开始 包不包含某数,包含返回第一次遇见的索引 不包含返回-1)

        console.log(arr.indexOf(15)); //-1
        console.log(arr.indexOf(11)); //0

2, lastIndexOf(从最后开始 包不包含某数,包含返回第一次遇见的索引 不包含返回-1)

        console.log(arr.indexOf(15)); //-1
        console.log(arr.indexOf(11)); //3

3, includes(包不包含某数,包含返回true 不包含返回false)

        console.log(arr.includes(15)); //false
        console.log(arr.includes(14)); //true

4, find(找 返回符合添加的第一个数)

        console.log(arr.find(item => item > 11)); //12

5, findLast(从后往前找 返回符合添加的第一个数)

        console.log(arr.findLast(item => item < 14)); //13

6, findIndex,findLastIndex(同上但返回索引)

        console.log(arr.findIndex(item => item > 11)); //1
        console.log(arr.findLastIndex(item => item < 14)); //2

猜你喜欢

转载自blog.csdn.net/Cuichenyang158/article/details/129223255
今日推荐