Day06 数组

数组的概念及定义

一组一般情况下相同类型的数据。除了 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. 使用字面量形式创建一个对象,该对象存储一个学生的信息,该对象包含姓名,学号、身份证、年龄、性别、所学专业等属性信息,同时该对象包含一个自我介绍的方法,用来输出该对象的所有信息.
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,558评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,002评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,024评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,144评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,255评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,295评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,068评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,478评论 1 305
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,789评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,965评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,649评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,267评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,982评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,800评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,847评论 2 351

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,644评论 18 139
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,226评论 0 4
  •   引用类型的值(对象)是引用类型的一个实例。   在 ECMAscript 中,引用类型是一种数据结构,用于将数...
    霜天晓阅读 1,045评论 0 1
  • 写着写着发现简书提醒我文章接近字数极限,建议我换一篇写了。 建议52:推荐使用String直接量赋值 一般对象都是...
    我没有三颗心脏阅读 1,337评论 2 4
  • 有无 无有 有有无无 无无有有 有无 有无 无有 谢谢你 希望对你有帮助。
    触角_阅读 136评论 0 0