浅谈数组

数组

  • 我们平常在书写代码的时候遇到需要使用多个数据,通过定义多个变量太麻烦了,所以就定义了数组。

    数组的概念和作用

  • 数组是一组数据的集合,用来存放多个数据。适用于需要操控多个数据,但是只能使用一个数据的情况。

    数组的创建

  • 字面量
    • var arr = [];
  • 构造函数
    • var arr = new Array();
  • 注意事项
    • 当两种方式创建数组,数组参数为1时,如下代码所示
     var arr = [5]; //[5]代表数组里只有一个成员5
     var arr1 = new Array(5);//[empty × 5] 代表数组长度为5,成员为五个空
     console.log(arr);
     console.log(arr1);

    数组的常用方法

  • push
    • 向数组的末尾增加一项,返回数组的长度。
    var arr = [1, 2, 3, 4];
    var length = arr.push(6);
    console.log(length);//5
    console.log(arr);//[1, 2, 3, 4, 6];
  • unshift
    • 向数组的头部增加一项,返回数组的长度。
    var arr = [1, 2, 3, 4];
    var length = arr.unshift(6);
    console.log(length);//5
    console.log(arr);//[6, 1, 2, 3, 4];
  • pop
    • 从数组的尾部移除一项,返回移去的这一项。
    var arr = [1, 2, 3, 4];
    var num = arr.pop();
    console.log(num);//4
    console.log(arr);//[1, 2, 3,];
  • shift
    • 从数组的头部移除一项,返回移去的这一项。
    var arr = [1, 2, 3, 4];
    var num = arr.shift();
    console.log(num);//1
    console.log(arr);//[2, 3, 4];
  • sort
    • 排列数组中的成员 改变原数组(适用于成员全为数字)有以下几种情况:

      • 传参(传函数 该函数必有两个参数)

        • 返回 a - b ,升序排列;
        var arr = [3, 7, 9, 8, 1, 6];
        arr.sort(function(a,b){
        return a - b;
        });//[1, 3, 6, 7, 8, 9]
        console.log(arr);
        • 返回 b - a ,降序排列;
        var arr = [3, 7, 9, 8, 1, 6];
        arr.sort(function(a,b){
        return b - a;
        });//[9, 8, 7, 6, 3, 1]
        console.log(arr);
      • 不传参
        • 按照第一个数字排列;
        var arr = [3, 7, 9, 8, 1, 6];
        arr.sort(function(){
        });//[3, 7, 9, 8, 1, 6]
        console.log(arr);
  • join
    • 以参数作为间隔将数组转换为字符串,默认为","
    var arr = [1, 2, 3, 4, 5, 6];
    var str = arr.join();
    var str1 = arr.join("*");
    console.log(str);//1,2,3,4,5,6
    console.log(str1);//1*2*3*4*5*6
  • concat
    • 连接作用 给数组连接新成员,如果新成员中有数组会先将这个数组拆开在连接,返回新数组
    var arr = [1, 2, 3, 4, 5, 6];
    var arr1 = arr.concat(7,8,9,[10,11,23]);
    console.log(arr1);//[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 23]
  • slice
    • 用于截取数组中的一段成员 返回新数组。分为以下几类

      • slice()表示将整个数组截取
      var arr = [1, 2, 3, 4, 5, 6];
      var arr1 = arr.slice();
      console.log(arr1);//[1, 2, 3, 4, 5, 6]
      • slice(a)表示从下标a截取到最后
      var arr = [1, 2, 3, 4, 5, 6];
      var arr1 = arr.slice(2);
      console.log(arr1);//[3, 4, 5, 6]
      • slice(a,b)表示从下标a截取到下标b,[a,b)
      var arr = [1, 2, 3, 4, 5, 6];
      var arr1 = arr.slice(2,4);
      console.log(arr1);//[3, 4]
      • slice(负数),表示从后往前数
      var arr = [1, 2, 3, 4, 5, 6];
      var arr1 = arr.slice(3,-2);
      console.log(arr1);//[4]
  • reverse
    • 将一个数组倒序 影响原数组(原数组倒序排列)返回原数组
    var arr = [1, 2, 3, 4, 5, 6];
    arr.reverse();
    console.log(arr);//[6, 5, 4, 3, 2, 1]
  • splice
    • 操作数组 接收的第一个参数表示操作数组的位置,第二个参数表示要删除的项数,之后的参数表示向第一个参数插入的成员(参数不固定)返回改变后的原数组
    var arr = [1, 2, 3, 4, 5, 6];
    arr.splice(1,2,7,8,9);
    console.log(arr);//[1, 7, 8, 9, 4, 5, 6]

    ES5新增的数组方法

  • indexOf
    • 查找数组中的某一个成员,存在返回下标,不存在返回-1
    • 第一个参数是查找的成员,第二个参数是查找元素的起始位置
    var arr = [1, 2, 3, 4, 5, 6, 7, 8];
    var index = arr.indexOf(5,4);
    console.log(index);//4
  • filter
    • 过滤 参数为函数 返回值为符合参数表达式的成员组成的数组
    • 函数的第一个参数为数组成员 函数的第二个参数为数组成员的索引 第三个参数为数组本身
    var arr = [1, 2, 3, 4, 5, 6, 7, 8];
    var arr1 = arr.filter(function(value,index,self){
        return value % 2 == 1;
    })
    console.log(arr1);//[1, 3, 5, 7]
  • forEach
    • 该方法用于循环 参数为一个函数,执行次数为length次,没有返回值
    • 函数的第一个参数为数组成员 函数的第二个参数为数组成员的索引 第三个参数为数组本身
    var arr = [1, 2, 3, 4, 5, 6, 7, 8];
    arr.forEach(function(value,index,self){
        console.log(value,index,self);
    })
  • map
    • 该方法也用于循坏参数为一个函数,执行length次,返回值为一个新数组,新数组的成员为参数函数的返回值
    • 函数的第一个参数为数组成员 函数的第二个参数为数组成员的索引 第三个参数为数组本身
    var arr = [10, 20, 30, 40, 50, 60, 70, 80];
    var arr1 = arr.map(function(value,index,self){
        return value * 1.5
    })
    console.log(arr1);//[15, 30, 45, 60, 75, 90, 105, 120]
  • some
    • 用于判断数组是否存在符合条件的成员,参数为一个函数,返回值为布尔值(只要有一个成员符合就为true,全部不符合就为flase)
    • 函数的第一个参数为数组成员 函数的第二个参数为数组成员的索引 第三个参数为数组本身
    var arr = [1, 2, 3, 4, 5, 6, 7, 8];
    var result = arr.some(function(value,index,self){
        return value === 5;
    })
    console.log(result)//true
  • every
    • 用于判断数组是否存在符合条件的成员,参数为一个函数,返回值为布尔值(只要有一个成员不符合就为flase,全部符合就为true)(对比some)
    • 函数的第一个参数为数组成员 函数的第二个参数为数组成员的索引 第三个参数为数组本身
    var arr = [1, 2, 3, 4, 5, 6, 7, 8];
    var result = arr.every(function(value,index,self){
        return value === 5;
    })
    console.log(result)//false
  • fill
    • 填充数组 接收三个参数 改变原数组
    • 传一个参数a,就是将数组的每个成员都填充为a
    var arr = [1, 2, 3, 4, 5, 6, 7, 8];
    arr.fill(9);
    console.log(arr);//[9, 9, 9, 9, 9, 9, 9, 9]
    • 传两个参数a,b 第一个参数为填充数,第二个参数是开始填充位置,往后都填充为a
    var arr = [1, 2, 3, 4, 5, 6, 7, 8];
    arr.fill(9,3);
    console.log(arr);//[1, 2, 3, 9, 9, 9, 9, 9]
    • 传三个参数 第一个参数为填充数 第二个填充的起始位置 第三个参数填充的结束位置
    var arr = [1, 2, 3, 4, 5, 6, 7, 8];
    arr.fill(9,3,6);
    console.log(arr);//[1, 2, 3, 9, 9, 9, 7, 8]

    ES6新增的数组方法

  • find
    • 查询数组中的成员,参数为一个函数,返回值为符合条件表达式的第一个成员,都不符合返回underfined
    • 函数的第一个参数为数组成员 函数的第二个参数为数组成员的索引 第三个参数为数组本身
    var arr = ["张三", "李四", "王五", "赵六", "田七", "刘八"];
    var username = arr.find(function(value,index,self){
        return value.indexOf("四") != -1;
    })
    console.log(username);//李四 
  • findIndex
    • 查询数组成员的索引值,参数为一个函数,返回值为符合条件表达式的第一个成员的索引,没有就返回-1
    • 函数的第一个参数为数组成员 函数的第二个参数为数组成员的索引 第三个参数为数组本身
    var arr = ["张三", "李四", "王五", "赵六", "田七", "刘八"];
    var Index = arr.findIndex(function(value,index,self){
        return value.indexOf("四") != -1;
    })
    console.log(Index);//1
  • copyWithin
    • 数组的内部复制,接收三个参数
    • 第一个参数为被替换位置 第二个参数为复制的起始位置 第三个参数为复制的结束位置(包含开始位置不包括结束位置)
    var arr = [1, 2, 3, 4, 5, 6, 7, 8];
    arr.copyWithin(1,3,7);
    console.log(arr);//?[1, 4, 5, 6, 7, 6, 7, 8]

原文地址:https://www.cnblogs.com/tongmeng/p/11610023.html

时间: 2024-07-29 23:20:16

浅谈数组的相关文章

https://github.com/miaozhongfeng/my-repository.git浅谈数组求和java实验

          这次作业呢,我是用java来写的,虽然java只是自己假期里看的一点点,但是人总是要接触新事物的,应该不断向前.          说明:这次作业有一个遗憾,就是我花了一个下午真真没搞懂POI包的使用,是我的智商问题吗?由于作业提交比较急迫,暂时先放弃,用的java的文件流,男人嘛,就是要敢舍敢弃!(是我胡说八道的).当然,不搞懂它我是不会罢休的!拭目以待!          好了,不瞎扯了.进入正题吧.我用的编译软件是my Eclipse2014(这个软件不得不说:真TM好

浅谈数组与指针

对于一维数组与指针: 对于二维数组与指针:

【JAVA基础教程】-浅谈数组及其内存控制

在用JAVA数据前我们都知道必须要先对数组对象进行初始化.当数组的所有元素都被分配合适的内存空间,当制定了初始值时,数组初始化完成.程序以后将不能重新改变数组对象在内存中的位置和大小.那么: 1.JAVA数组为静态,即一旦初始化后,其长度是不可改变的. 2. 数组变量是引用变量,并不是数组对象本身. 3. 两种初始化方式: 动态初始化:指定数组的长度,初始值自动生成. 静态初始化:指定初始值,长度自动生成. 4. JAVA中,引用变量本身无需初始化,引用变量所引用的对象是需要初始化的. 5. 所

ES6浅谈 -- 数组扩展

1.数组可以用spread参数合并,使用该参数要注意被合并的一定是一个数组对象.另外不管是数组合并还是数组拼接都是浅拷贝,实质是拷贝地址(引用). 2.可以和解构赋值混用,如const [first, ...rest] = [1,2,3,4,5]; 还可以将字符串每个字符拆分然后变成数组元素. 3.Array.from(),将类数组对象和可遍历对象转成数组:Array.of(),将一组值转为数组,与Array不同的是,array只跟一个参数会认为输入了这个数组的长度,而array of则认为是输

ES6浅谈--数组扩展、对象扩展

数组扩展 1.includes()方法,参数为要检测的值.includes方法有点像indexOf(),indexOf未检测到则返回-1,否则返回下标.includes则是返回true或false.includes可以检测NaN.第二个参数表示从什么位置检测. 2.flat和flatMap.flat负责把数组拉平,意思是一个二维数组调用flat方法会变成一维数组.参数传的是数组的维度.例如传2则表示将3维拉成1维.如果数组中有空位则跳过.flatMap有点像flat方法和Map方法的结合.先对每

浅谈数组和链表

?写在前面: 数组和链表是数据结构中最基础的两种结构,其他的都是由这两者转化而来:因此,掌握这两种结构至关重要!下面,时光就带大家来学习一下数组和链表: 思维导图: 1,什么是线性表? 线性表是具有相同类型的n(>=0)个数据元素的有限序列(a0,a1,a2,…,an),ai是表项,n是表长度: 那么为什么要提到线性表呢?因为数组和链表都是线性表的结构,只不过它们的存储方式不一样:根据存储方式不同,可将线性表分为顺序表和链式表:线性表是数据结构中的逻辑结构.可以存储在数组上,也可以存储在链表上.

浅谈二维中的树状数组与线段树

一般来说,树状数组可以实现的东西线段树均可胜任,实际应用中也是如此.但是在二维中,线段树的操作变得太过复杂,更新子矩阵时第一维的lazy标记更是麻烦到不行. 但是树状数组在某些询问中又无法胜任,如最值等不符合区间减法的询问.此时就需要根据线段树与树状数组的优缺点来选择了. 做一下基本操作的对比,如下图. 因为线段树为自上向下更新,从而可以使用lazy标记使得矩阵的更新变的高校起来,几个不足就是代码长,代码长和代码长. 对于将将矩阵内元素变为某个值,因为树状数组自下向上更新,且要满足区间加法等限制

转: 浅谈C/C++中的指针和数组(二)

转自:http://www.cnblogs.com/dolphin0520/archive/2011/11/09/2242419.html 浅谈C/C++中的指针和数组(二) 前面已经讨论了指针和数组的一些区别,然而在某些情况下,指针和数组是等同的,下面讨论一下什么时候指针和数组是相同的. C语言标准对此作了说明: 规则1:表达式中的数组名被编译器当做一个指向该数组第一个元素的指针: 注:下面几种情况例外 1)数组名作为sizeof的操作数 2)使用&取数组的地址 规则2:下标总是与指针的偏移量

转:浅谈C/C++中的指针和数组(一)

转自:http://www.cnblogs.com/dolphin0520/archive/2011/11/09/2242138.html 浅谈C/C++中的指针和数组(一) 指针是C/C++的精华,而指针和数组又是一对欢喜冤家,很多时候我们并不能很好的区分指针和数组,对于刚毕业的计算机系的本科生很少有人能够熟练掌握指针以及数组的用法和区别.造成这种原因可能跟现在大学教学以及现在市面上流行的很多C或者C++教程有关,这些教程虽然通俗易懂,但是在很多关键性的地方却避而不谈或者根本阐述不清楚,甚至很