美文网首页
Day06 数组

Day06 数组

作者: azure_1122 | 来源:发表于2018-01-08 11:48 被阅读0次

数组的概念及定义

一组一般情况下相同类型的数据。除了 Object 类型之外,Array 类型是ECMAScript 最常用的类型。而且 ECMAScript 中的 Array 类型和其他语言中的数组有着很大的区别。 虽然数组都是有序排列, 但 ECMAScript 中的数组每个元素可以保存任何类型。ECMAScript 中数组的大小也是可以调整的。

数组的创建方式

  • 第一种是 new 运算符(构造函数);
    注意:给构造函数传递一个值也可以创建数组。如果传递的是数字,则会按照该数字创建包含给定项数的数组;而如果传递的是其他类型的参数,则会创建包含那个值的只有一项的数组。
  • 第二种是字面量;
    在计算机科学中,字面量是用于表达源代码中一个固定值的表示法。
    字面量表示如何表达这个值,一般除去表达式,给变量赋值时,等号右边都可以认为是字面量。

数组的操作

  • 使用索引下标来读取数组的值--下标是固定的,从0开始
  • length:静态赋值/动态赋值(动态的,无需指定大小)
  • 数组的length属性 ,代表长度

数组的 length 属性不只是只读的。通过设置这个属性,可以从数组的末尾移除项或向数 组中添加新项。

  • 数组的遍历通过for循环
  • 检测数组:Array.isArray() 静态方法

Array.isArray():确定括号中的某个值到底是不是数组

数组的方法

  • push() 可以接收任意数量的参数,把它们逐个添加到数组末尾,并返回修改后数组的长度。
  • pop() 从数组末尾移除最后一项,减少数组的length值,然后返回移除的项。
  • unshift()方法能够在数组前端添加任意个项并返回新数组的长度。
  • shift() 方法能够移除数组中的第一个项并返回该项,同时将数组长度减 1。
  • reverse() 方法会反转数组项的顺序。
  • sort() 方法按字母表升序排列数组项。

注意:如果按照其他方式而非字母表顺序进行数组排列,必须给sort方法传递一个比较函 数做参数。

var arr=[12,54,7,9,562,123,17,5666];
        function compare(a,b){
            return a-b
        }
        alert(arr.sort(compare));
  • concat() 方法可以基于当前数组中的所有项创建一个新数组。
var arr=['d','e','a','c','b'];
        var arr1=['hello','hi'];
        var arr2=[3,6,9];
        //var newarr=arr.concat();//赋值一份arr
        //var newarr=arr.concat(arr1,arr2);//合并数组,d,e,a,c,b,hello,hi,3,6,9
        var newarr=arr.concat('haha',arr1,arr2,'xixi','hehe');//合并数组,给数组添加新的数组项。
        alert(newarr);
        alert(arr);//不会影响原数组。d,e,a,c,b
  • slice() 方法它能够基于当前数组中的一或多个项创建一个新数组。可以接受一或两个参数,即要返回项的起始和结束位置,不包括结束位置。
        var arr=['a','b','c','d','e'];
        var newarr=arr.slice(1);//从1下标处开始截取,直到数组结束。 bcde
        var newarr=arr.slice(1,3);//从1下标处开始截取,直到下标3处结束,不包括3。 bc
        var newarr=arr.slice();//没有参数,截取全部  a,b,c,d,e
        var newarr=arr.slice(0,-3);//负数从后面往前数,从-1开始   a,b
        var newarr=arr.slice(0,2);//a,b
        var newarr=arr.slice(-5,-1);//a,b,c,d
        var newarr=arr.slice(-1,-5);//空白。
        alert(newarr);
  • splice() 方法,对数组进行删除、插入、替换,是最强大的数组方法。返回值是数组。
//var arr=['a','b','c','d','e'];
        alert(arr.splice(0,3));//截取 从0位置开始,截取3个长度。 对数组进行删除
        alert(arr.splice(0,3,'hehe','xixi','haha'));//替换
        alert(arr);//hehe,xixi,haha,d,e  替换:删除了3个数组项,插入三个数组项。
        alert(arr.splice(1,0,'hehe'));//插入
        alert(arr);
  • join()方法,将数组转换成对应的字符串。参数就是连接符。

整数数组/字符串数组/对象数组/二维数组

for...in循环

数组的排序

  • 冒泡排序
冒泡排序
        var arr=[12,65,12,789,1,2,12,65,3,4,8,4,3,12];
        var times=0;
        for(var i=0;i<arr.length-1;i++){//控制遍历的次数
            for(var j=0;j<arr.length-i-1;j++){
                if(arr[j]<arr[j+1]){
                    var temp=arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=temp;
                }
                times++;
            }
        }
        console.log(arr);
        console.log(times);
  • 选择排序
选择排序
    var arr=[12,65,12,789,1,2,12,65,3,4,8,4,3,12];
    for(var i=0;i<arr.length;i++){
        var minIndex=i;//最小值的索引(下标);
        var minValue=arr[minIndex];//最小值。
        for(var j=i+1;j<arr.length;j++){
            if(arr[j]<minValue){//当arr[j]比最小值还要小,arr[j]最小值。
                minValue=arr[j];//最小值
                minIndex=j;//最小值的索引
            }
        }
        //外层循环假设最小值,内层的循环会返回比较后的最小值的索引。
        if(minIndex!=i){//如果我假设不是最小值,交互。
            var temp=arr[minIndex];
            arr[minIndex]=arr[i];
            arr[i]=temp;
        }
        
        
    }
    
    console.log(arr);
  • 快速排序
快速排序
function quickSort(array){
    
    if(array.length<=1){
        return array;
    }else{
        var midIndex=Math.ceil(array.length/2);
        var midValue=array.splice(midIndex,1)[0];
        var left=[];
        var right=[];
        for(var i=0;i<array.length;i++){
            if(array[i]<midValue){
                left.push(array[i]);
            }else{
                right.push(array[i]);
            }
        }
        return quickSort(left).concat(midValue,quickSort(right)) ;
    }
}

var arr=[12,65,12,789,1,2,12,65,3,4,8,4,3,12];
console.log(quickSort(arr));

值传递和引用传递。

JS堆和栈的了解以及索引思维

  • 栈:自动分配内存空间,系统自动释放,基本类型的值和引用类型的地址
  • 堆:动态分配的内存,大小不定,也不会自动释放。存放引用类型的值。

对象的本质和意义

对象是javascript的数据类型。对象是一种复合值,它将很多值聚合在一起,可通过名字访问这些值。对象也看做是属性的无序集合,每个属性都是一个名/值对。

JSON表示对象的方法:利用json的方式创建对象。(类似于字面量创建对象)

  • json: 是一种轻量级的数据交换格式。不是js独有的。
  • json组成:简单值+对象+数组。
  • json里面字符需要添加双引号。
  • json没有var关键字,没有分号(;)

应用

1.随机生成一个五位以内的数,然后输出该数共有多少位,分别是什么。
2.数组的冒泡排序(封装函数)
3.数组的选择排序(封装函数)
4.编写函数map(arr) 把数组中的每一位数字都增加30%
5.编写函数has(arr , 60) 判断数组中是否存在60这个元素,返回布尔类型
6.随机点名程序

综合应用

  1. 编写函数norepeat(arr) 将数组的重复元素去掉,并返回新的数组。
  2. 有一个从小到大排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
  3. 定义一个含有30个整型元素的数组,按顺序分别赋予从2开始的偶数;然后按顺序每五个数求出一个平均值,放在另一个数组中并输出。试编程。
  4. 通过循环按行顺序为一个5×5的二维数组a赋1到25的自然数,然后输出该数组的左下半三角。试编程。
  5. 使用字面量形式创建一个对象,该对象存储一个学生的信息,该对象包含姓名,学号、身份证、年龄、性别、所学专业等属性信息,同时该对象包含一个自我介绍的方法,用来输出该对象的所有信息.

相关文章

网友评论

      本文标题:Day06 数组

      本文链接:https://www.haomeiwen.com/subject/actbnxtx.html