day4

数组

①数组

概念:一组数据。(通常情况下,数据类型要保持一个,而JS允许不同数据类型)

②创建方式

    var a = new Array(arg);//arg为数组长度,但打印数组时只显示已填充内容
    var a = new Array("xxx","xxx",10);//直接写出数据,JS自动识别,将数据覆盖参数

③数组长度可变

在普通编程语言中,数组长度不可变,但在JS中可以动态改变。
也就是说,在JS中添加和删除元素,不需要关心长度,它会自动变化。
JS中,没有下标越界的概念,超出长度的下标所指向的数据为undefined

④数组检测

 var a = new Array();
 var b = 1;
 console.log( a instanceof Array );//true
 console.log( b instanceof Array );//false

⑤数组为什么是Object?

    var a = [];
    a[0] = 1;
    a[1] = 2;
    a["name"] = "ZYC";
    console.log( a );// [1,2,name: "ZYC"];

数组的本质: 对象;
对象的本质: Hash;
Hash的本质: 数组;
---------------》JS基于对象

什么是Hash?

加密:按照一定的规则将原文转换,这个规则不公开,则为加密
加密规则:必须保证不同的原文,转换出不同的密文,反之亦然。
MD5/SSH
Hash表:对于键值对,将key使用一个Hash算法,计算出一个下标,指向这个键值对;再进行key的查询时,便使用之前的Hash算法将下标计算出来,直接取值。

JS中数组的本质:

    //[key: value, key; value]
    var arr1 = new Array();
    var arr2 = new Object;
    arr1[0] = arr2[0] = 1;
    arr1["name"] = arr["name"] = "XWS";
    arr1["age"] = arr[2] = 20;
    //上述赋值都成立

⑥for-in循环

    var arr = new Array(1,2,3);
    for ( let i = 0; i < arr.length; i ++) console.log( arr[i] );
    for ( let arg in arr ) console.log( arr[arg] );
    //两种方法输出没有区别
    var arr = new Object();
    arr.name = "XWS";
    arr.age = "21";
    arr.city = "CQ";
    for ( let arg in arr ) {console.log( arg + ":"); console.log( arr[arg] );}//前者输出属性名,后者输出属性值,即属性名可以作下标。

数组的json:

    var arr = new Array(1,2,3);
    //arr的结构就是 { 0: 1, 1: 2, 2: 3 }
    //注意!
    console.log( arr == { 0: 1, 1: 2, 2: 3 } );//false
    //因为对象在内存中是通过访问其在堆内存中的地址来引用的,所以即便是两个结构和属性值一模一样的对象,只要不是同一个对象,就不相等。也就是说,对象的比较,就是比较对对象的引用。

⑦常见的数组API

    //添加一个元素
    var arr = new Array(1,2,3);
    arr.push(4);//在数组末尾推入一个元素
    arr.pop;//在末尾获取并删除
    arr.unshift(0);//在数组开头插入一个元素
    arr.shift(0);//在开头获取并删除
    arr.join("#");//将数组按#分割合并成字符串
    

⑧排序,排序!

    var arr = [1,4,2,55,67,5,34,23,0,3];
    //冒泡排序
    var arr1 = arr;
    for ( let i = 0; i < arr1.length; i ++){
        for ( let j = 0; j < arr1.length-1-i; j ++) {
            if ( arr1[j] > arr1[j+1] ) {
                var temp = arr1[j];
                arr1[j+1] = arr1[j];
                arr1[j] = temp;
            }
        }
    }
    console.log( arr1 );
    
    //选择排序
    var arr2 = arr;
    for ( let i = 0; i < arr2.length; i ++) {               
        for ( let j = i+1; j < arr2.length; j ++) {         
            if ( arr2[i] > arr2[j] ) {
                var temp = arr2[i];
                arr2[i] = arr2[j];
                arr2[j] = temp;
            }
        }
    }
    console.log( arr2 );

    //快速排序
    var arr3 = arr;
    function quickSort( arr ) {
        if ( arr.length <= 1 ) return arr;
        var midIndex = parseInt( arr.length/2 );//取中间值,下标取整
        var midVal = arr[ midIndex ];

        var left = new Array();
        var right = new Array();
        for ( let i = 0; i < arr.length; i ++) {
            if ( i == midIndex ) continue;
            else {
                if ( arr[i] > midVal ) right.push( arr[i] );
                else left.push( arr[i] );
            }
        }
        return quickSort( left ).concat ( midVal, quickSort( right ) );
    }
    var result = quickSort( arr3 );
    console.log( result );


    //插入排序
    var arr4 = arr;
    function insertSort( arr ) {
        for ( let i = 1; i < arr.length; i ++) {
            searchiIndex ( arr, i, arr[i] );
        }
        return arr;
    }

    function searchIndex( arr, index, value ) {
        for ( let i = 0; i < index-1; i ++) {
            if ( value < arr[i] ) { insertIndex( arr, i-1, value, index );return arr; }
        }
    }

    function insertIndex( arr, index, value, valueIndex ) {
        for ( let i = valueIndex-1; i > index; i --) {
            arr[i+1] = arr[i];
        } 
        arr[index] = value;
    }

    console.log( insertSort( arr ) );
posted @ 2016-09-01 09:58  Asambojur  阅读(117)  评论(0)    收藏  举报