zoukankan      html  css  js  c++  java
  • js中的应用数据类型

    array数据类型的详细解读

    数组是对象数据类型,只不过是对象数据类型中的一个细分类而已
    console.log(typeof [1, 2, 3]); -->"object"

    定义一个数组有两种方式
    字面量方式
    var ary = [45, 56, 67];
    实例创建
    var ary = new Array();

    console.dir(ary);
    数组也是有属性名和属性值组成的,只是我们不用写属性名即可,默认属性名是数字,代表当前是数组中的第几个值-->索引
    0代表第一个值 ary[0]
    ary[索引] 获取数组中对应的值
    ary.length 存储的值是当前数组的个数

    一般我们都是是用for循环来遍历数组中的每一项,进行相关的操作
    for (var i = 0; i < ary.length; i++) {
    var cur = ary[i];//每一次循环获取当前数组中的那一项
    }

    var ary = [12, 23];
    增加第三项-->往末尾增加一项
    ary[2] = 34;
    添加前最后一项的索引是ary.length-1,我们在它的后面添加一项,索引是ary.length
    ary[ary.length] = 34;

    删除第四项 -->删除数组最后一项
    delete ary[3];
    delete ary[ary.length - 1];
    数组中的length属性是可以修改值的
    ary.length = ary.length - 1; 或者
    ary.length -= 1;
    console.log(ary);


    数组常用的方法(记住这些方法的四个维度):
    1、方法的作用
    2、方法的参数
    3、方法的返回值
    4、原有的数组是否发生了改变

    var ary = [12, 23, 56, 67, 78, 89, 91, 13];

    一、数组的增加、删除、修改
    1、push() 向数组的末尾增加新的元素 参数:要增加的内容(可以是多个值) 返回值:增加内容后数组的长度值 原有数组改变了
    var res = ary.push(78, 100);
    console.log(res);
    console.log(ary);

    2、pop() 删除数组最后一个元素 返回值:删除的那个元素 原有数组改变
    var res = ary.pop();
    console.log(res);
    console.log(ary);

    3、shift() 删除数组的第一个元素 返回值:删除的那个元素 原有数组改变
    var res = ary.shift();
    console.log(res);
    console.log(ary);

    4、unshift() 向数组的开头增加新的元素 参数:要增加的内容(可以是多个值) 返回值:增加内容后数组的长度值 原有数组改变了
    var res = ary.unshift(100, 200);
    console.log(res);
    console.log(ary);

    5、splice(n,m) 从索引n开始删除m个元素 返回值:把删除的内容当做一个新的数组返回 原有的数组改变了
    splice(n) 从索引n开始删除到数组的末尾 --> splice(0) 全删,清空数组 --> splice() 一个都不删除
    var res = ary.splice(2, 4);
    console.log(res);
    console.log(ary);

    splice(n,m,x) 从索引n开始,删除m个元素,用x把这个位置填补上 返回值:把删除的内容当做一个新的数组返回 原有的数组改变了
    var res = ary.splice(2, 2, "珠峰培训");
    console.log(res);
    console.log(ary);

    splice(n,0,x) 从索引n开始,一个都不删除,把x添加到索引n的前面 原有的数组改变了
    var res = ary.splice(3, 0, "珠峰培训");
    console.log(res);
    console.log(ary);


    二、数组的查询
    var ary = [12, 23, 56, 67, 78, 89, 91, 13];
    1、slice(n,m) 从索引n开始,找到索引m处(不包含m这一项),把找到的内容当做一个新的数组返回,原有的数组不变
    slice(n) 从索引n开始找到数组末尾 --> slice(0) 复制一份和原来一模一样的数组(数组的克隆) <--> slice()
    var res = ary.slice();
    console.log(res);
    console.log(ary);

    2、concat() 实现数组的克隆 原有的数组也是不进行改变的
    var res = ary.concat();
    console.log(res);
    console.log(ary);
    concat()本身并不是为了实现数组的克隆,而是实现两个数组的拼接的
    var a = [1, 2, 3];
    var b = [2, 3, 4];
    var res = a.concat(b);//a数组拼接了b数组,最终合并成一个数组
    console.log(res);

    三、数组转为字符串
    1、join
    2、toString

    一些常用的但不兼容的方法
    1、indexOf 不兼容 --> lastIndexOf
    2、forEach 不兼容
    3、map 不兼容

    四、操作数组的顺序
    var ary = [12, 23, 56, 7, 78, 89, 91, 13];
    1、reverse() 将数组倒过来排列 原有的数组改变
    var res = ary.reverse();
    console.log(res);
    console.log(ary);

    2、sort() 实现数组的排序 原有的数组改变 但是默认情况下只能处理10以内的数字,超过10按照第一个字母排序
    传递一个参数可实现高级的排序 参数是一个函数,有两个形参a,b,return a-b是升序,return b-a是降序
    ary.sort(function (a, b) {
    return b - a;
    });
    console.log(ary);




    数组中冒泡排序思想


       var ary = [12, 8, 14, 9, 1];
    ary.sort(function (a, b) {
    console.log(a, b);
    });
    console.log(ary);
    里面的函数执行了4次
    12 8
    8 14
    14 9
    9 1
    a是每一次的当前项,b是后一项 return a-b; 返回当前项和后一项的差值--> 大于0 小于等于0

    冒泡排序的算法
    思想:当前项和后一项进行比较,如果当前想大于后一项,两者交换位置
    var ary = [12, 8, 14, 9, 1]; ---> [1,8,9,12,14]
    第一轮比较:
    [8,12,14,9,1]
    [8,12,14,9,1]
    [8,12,9,14,1]
    [8,12,9,1,14]
    第一轮两两比较完成后,并没有达到我们的目标值,但是把数组中当前最大的值14 放在了数组的最末尾的位置

    第二轮比较:
    [8,12,9,1,14]
    [8,9,12,1,14]
    [8,9,1,12,14]

    第三轮比较:
    [8,9,1,12,14]
    [8,1,9,12,14]

    第四轮比较:
    [1,8,9,12,14]

    每一轮前后比较完成后,都会把当前最大的那个数值,放在数组的末尾的位置;那么一个数组有5项,我最多只需要把四个最大值分别放在末尾就实现了排序;--->我最多比较 ary.length-1 轮

    每一轮比较的次数也有规律:
    第一轮 4次 --> 不用和自己比,所以最多比较4次,并且在这个轮比较前,还没有往后面放最大的数
    第二轮 3次 数组末尾放了一个最大的值 ---> 不用和自己比,最多4次,也不用和末尾的那一个比,只剩3次了
    第三轮 2次 数组末尾放了两个最大的值 ---> 不用和自己比,最多4次,也不用和末尾的那两个比,只剩2次了
    ......

    i是代表轮数 i最多循环ary.length-1次即可

    i=0 第一轮 比较 4次 5-1不用和自己比 -0末尾还没有最大的值
    i=1 第二轮 比较 3次 5-1不用和自己比 -1末尾有一个最大的值
    i=2 第三轮 比较 2次 5-1不用和自己比 -2末尾有两个最大的值

    j代表每一轮的次数 j最多循环 ary.length-1-i 次

    ary[j]当前值 ary[j+1]是后一项的值
    如果当前项的值大于后一项的值的话,两者交换位置


    var a=12;
    var b=13;
    a和b交换位置,如何的交换
    var c=null;
    c=a;
    a=b;
    b=c;




    冒泡排序

    function sortAry(ary) {
        for (var i = 0; i < ary.length - 1; i++) {//i是比较的轮数
    for (var j = 0; j < ary.length - 1 - i; j++) {//j是每一轮比较的次数
    if (ary[j] > ary[j + 1]) {//如果当前的值大于后一项的值,交换位置
    var temp = null;
    temp = ary[j];
    ary[j] = ary[j + 1];
    ary[j + 1] = temp;
    }
    }
    }
    return ary;
    }
    var ary = [12, 23, 45, 25, 12, 15, 17, 18, 1, 2, 5, 4, 8, 19];
    var res = sortAry(ary);
    console.log(res);


    数组去重


    var ary = [1, 2, 3, 1, 2, 3, 2, 1, 2, 5, 4, 2, 3, 1, 1, 2, 3, 1, 2, 3, 2, 1, 2, 5, 4, 2, 3, 1, 1, 2, 3, 1, 2, 3, 2, 1, 2, 5, 4, 2, 3, 1, 1, 2, 3, 1, 2, 3, 2, 1, 2, 5, 4, 2, 3, 1, 1, 2, 3, 1, 2, 3, 2, 1, 2, 5, 4, 2, 3, 1, 1, 2, 3, 1, 2, 3, 2, 1, 2, 5, 4, 2, 3, 1, 1, 2, 3, 1, 2, 3, 2, 1, 2, 5, 4, 2, 3, 1, 1, 2, 3, 1, 2, 3, 2, 1, 2, 5, 4, 2, 3, 1, 1, 2, 3, 1, 2, 3, 2, 1, 2, 5, 4, 2, 3, 1, 1, 2, 3, 1, 2, 3, 2, 1, 2, 5, 4, 2, 3, 1, 1, 2, 3, 1, 2, 3, 2, 1, 2, 5, 4, 2, 3, 1, 1, 2, 3, 1, 2, 3, 2, 1, 2, 5, 4, 2, 3, 1, 1, 2, 3, 1, 2, 3, 2, 1, 2, 5, 4, 2, 3, 1, 1, 2, 3, 1, 2, 3, 2, 1, 2, 5, 4, 2, 3, 1];
    var obj = {};
    for (var i = 0; i < ary.length; i++) {
    var cur = ary[i];
    if (obj[cur] == cur) {
    //ary.splice(i, 1);
    ary[i] = ary[ary.length - 1];
    ary.length -= 1;
    i--;
    } else {
    obj[cur] = cur;
    }
    }
    obj = null;
    console.log(ary);


    函数数据类型

    function是引用数据类型中的一种,是一个函数数据类型,我们把function称之为一个函数,或者一个方法,在或者一个功能

    function由两部分组成:定义(把需要实现的功能预先处理好)、执行(需要的时候执行这个方法即可,并且根据需要可以多次执行)


    //制定一个约会的方法(计划)
    function dating() {
    //1、取钱 10000
    //2、制定路线方案 爬长城--海洋馆--欢乐谷--国家大剧院--俏江南吃饭--回家
    }
    //执行计划
    dating();
    dating();
     
    不知道执行sum的时候,会传递几个数字,我们不管它传递几个,有几个我就处理几个
    console.dir(arguments); arguments是每一个函数天生自带的存储传递参数值的集合,以数字作为索引,索引从0开始;length属性代表传递进来参数值的个数;我们把arguments称之为类数组(对象数据类型的)
    arguments[0] 第一个参数的值 arguments[1]第二个参数的值 arguments[n]第n+1个参数的值
    arguments.length 有多少个参数
    function sum() {
    var total = 0;
    for (var i = 0; i < arguments.length; i++) {
    //i=0 拿第一个参数值 arguments[0]
    //i=1 拿第二个参数值 argumnets[1]
    //arguments[i] 就是每一次循环的时候,拿出来的对应的参数值
    var cur = Number(arguments[i]);
    if (!isNaN(cur)) {
    total += cur;
    }
    }
    return total;
    }
    var total = sum(1, 2, 3, 4, 5, 6, 7, 8, 9);
    console.log(total);


    Date类型


  • 相关阅读:
    Antenna Placement---poj3020(最大匹配)
    Strategic Game--hdu1054(最小覆盖点)
    Oil Skimming---hdu4185(最大匹配)
    Windows平台下NS2网络仿真环境的搭建
    视频参数(流媒体系统,封装格式,视频编码,音频编码,播放器)对比
    最简单的基于FFMPEG+SDL的音频播放器
    FFplay源代码分析:整体流程图
    图解FFMPEG打开媒体的函数avformat_open_input
    100行代码实现最简单的基于FFMPEG+SDL的视频播放器
    视频编码标准汇总及比较
  • 原文地址:https://www.cnblogs.com/jingjing0518/p/4703339.html
Copyright © 2011-2022 走看看