js-数组的概念、创建、类型、排序、操作方法、遍历

一、数组概念和创建方式

概念:
<script type="text/javascript">
        //数组:一组数据,用[]表示,数据放到中括号里,用逗号隔开 有序的值的集合
        //对象{},无序的值的集合
            
            /*var arr = [1,2,3,4,5];
            console.log(arr[2]);//索引从0开始,0表示的是第一个值(元素)
            
            var obj = {d:4,a:1,c:3,b:2};
            console.log(obj.a);*/
            </script
创建方式:
<script type="text/javascript">
            //字面量
            /*var arr = ["a","b","c"];
            var arr1 = [];
            
            console.log(arr[0],arr[arr.length-1]);
            
            for(var i = 0; i < arr.length; i++){
                console.log(arr[i]);
            }*/
            
            /*console.log(arr1.length);//0
            arr1.length = 5;
            console.log(arr1);
            console.log(arr1[0],arr1[3]);//undefined
            console.log(arr[3]);//undefined*/
            
            
            /*arr1[5] = 10;
            console.log(arr1.length);
            console.log(arr1,arr1[1]);*/
            
            /*var arr2 = [1,,2,3,,,4];
            console.log(arr2.length);//7*/
            
            //构造函数 Array
            
            //var arr = new Array(1,2,3);
            //var arr = new Array(5);//单个参数表示长度
            //console.log(arr);
            </script>

二、数组的操作方法

<script type="text/javascript">
            自定义一个函数或者对象的方法,js语言里自带的方法考虑的方面:
            功能,参数,返回值
            //增 删  
            push() 可以接受多个参数,将参数追加到数组的尾部,
            返回增加后的数组的长度,原数组发生改变
            var arr = [1,2,3,6];
            var a = arr.push(11,22,33);
            console.log(arr,a);//(7) [1, 2, 3, 6, 11, 22, 33]    7
            
            pop() 不接受参数,从数组尾部删除一个元素,返回删除的元素,
            原数组发生改变
            var arr = [1,2,3,6];
            var a = arr.pop();
            console.log(arr,a);//(3) [1, 2, 3]   6
            
    unshift()可以接受多个参数,将参数追加到数组的头部,返回增加后的数组的长度,
    原数组发生改变
            var arr = [1,2,3,6];
            var a = arr.unshift(11,22);
            console.log(arr,a);//(6) [11, 22, 1, 2, 3, 6] 6
            
    shift()不接受参数,从数组头部删除一个元素,返回删除的元素,原数组发生改变
            var arr = [1,2,3,6];
            var a = arr.shift(11,22);
            console.log(arr,a);//(3) [2, 3, 6] 1
            
    //截取
   slice()无参数 整体截取;1个参数,从该参数表示的索引位开始截取,直至数组结束 ;
    2个参数,从第一个参数表示的索引位开始截取,到第2个表示索引结束,但不包括第2个
    索引对应的值,返回截取的数组,原数组不改变
    splice() 无参数,不截取;1个参数,该参数表示开始的索引;
            2个参数,第2个参数表示截取的个数,
            3个或以上的参数,将第3个及以后的参数插入到截取的开始位置
            返回截取的数组,原数组发生改变
            var arr = [11,2,3,5];
            var a = arr.slice(0,1);
            console.log(arr,a);//[11, 2, 3, 5] [11]	
            var a = arr.splice(1,2,33,44);
            console.log(arr,a);//(4) [11, 33, 44, 5]   (2) [2, 3]

           
            //排序
            //reverse();  数组元素的翻转,原数组发生改变
            var arr = [1,2,3,4];
            var a = arr.reverse();
            console.log(arr,a);//(4) [4, 3, 2, 1]  (4) [4, 3, 2, 1]
            
            //sort()从小到大和从大到小排序
            var arr = [5,11,8,22,3,9];
            arr.sort(function(a,b){
                //return a-b;从小到大
                return b - a;//从大到小
            });
            console.log(arr);//22 11 9 8 5 3
            
            
            //join() 将数组转换成字符串
            var arr = [1,2,3,4];
            var str = arr.join("");//"1234"
            var str = arr.join("+++++");//"1+++++2+++++3+++++4";
            console.log(str);
            
            //concat() 合并数组
            var arr1 = [1,2];
            var arr2 = [3,4];
            var arr = arr1.concat(arr2);//[1,2,3,4]
            var arr = arr1.concat(11,22);//[1,2,11,22]
            console.log(arr);
            
        </script>
<script type="text/javascript">
ES5新增数组操作方法
1、indexOf
2、forEach
3、map 
4、filter
5、some
6、every
7、reduce(对数组中的所有元素调用指定的回调函数。该回调函数的返回值为累积结果,
并且此返回值在下一次调用该回调函数时作为参数提供。)

            //indexOf(item) 返回item在数组中的索引 ,如果数组中没有这个元素,
            返回-1
            /*var arr = [1,2,3,4];
            console.log(arr.indexOf(11),arr.indexOf(1));//-1 0
            console.log(arr.indexOf(2,2));//-1   第2参数表示检测的起始位*/
            
            //数组去重
            /*function noRepeat(arr){
                var newArr = [];
                for(var i = 0; i < arr.length; i++){
                    if(newArr.indexOf[arr[i]]==-1){
                        newArr.push(arr[i]);
                    }
                }
            }*/
            
            //forEach() map()
            
            /*var arr = [11,22,33,44];
            
            var a = arr.forEach(function(item,index){ //第一个参数为元素,
            第二参数为索引
                //console.log(item,index);
                return item+1;
            });
            
            console.log(a);
            
            var a = arr.map(function(item,index){
                //console.log(item,index);
                return item+1;
            });
            
            console.log(a);*/
            
            /*//filter //过滤出符合条件的元素
            
            var arr = [1,2,3,4];
            
            var a = arr.filter(function(item){
                return item > 2;//过滤条件
            });
            console.log(a);*/
            
            
            //some   //只要有一个元素满足条件,返回true
            //every  //所有的元素都要满足条件,返回true
            /*var arr = [1,2,3,4];
            
            var a = arr.some(function(item){
                return item > 2;
            });
            
            var b = arr.every(function(item){
                return  item > 2;
            })
            console.log(b);//false*/
            
            
            //reduce
            
            /*var arr = [1,2,3,4];
            
            var sum = arr.reduce(function(a,b){
                console.log(a,b);
                return a + b;
            });
            
            console.log(sum);*/
            
            var arr = [[1,2],[3,4],[5,6]];//借助reduce这个方法 实现数组的
            扁平化 [1,2,3,4,5,6];
            
            var brr = arr.reduce(function(a,b){
                return a.concat(b);
            });
            
            console.log(brr);
            
            
            
        </script>

三、数组的遍历

<script type="text/javascript">
            var arr = [11,22,33,44];
            for(var i = 0; i < arr.length; i++){
                console.log(arr[i]);
            }
            
            //for-in
            for(var i in arr){//通过i访问数组里的元素
                //console.log(i,arr[i]);
                document.write("第"+(i+1)+"个:"+arr[i])+"<br>";
            }
            
            可以用来遍历数组,但是一般不用,而是用for-in遍历对象
            var obj = {a:1,b:2,c:3};//{"a":1,"b":2,"c":3}
            for(var i in obj){ //i表示的属性名(键名)
                //console.log(i,obj.i);//obj.i 会把i当成一个属性名看待,
             而obj里又没有这个属性,取值为undefined,所以不用obj.i,用obj.[i]
                console.log(obj[i]);//i是一个变量,所以不加引号
            }
            
            //对象的属性名是一个字符串
            var obj = {};
            /*obj[1] = 'aaa';*/
            var obj1 = {a:1};//字符串表示形式:"[object Object]"
            obj[obj1] = 10;
            console.log(obj);//{[object Object]: 10}
            
        </script>

四、数组类型

<script type="text/javascript">
            //用数组表示数据的时候,数组元素的类型通常一致
            //var arr = [1,"abc",true,function(){},{}]; 代码可读性非常差
            var arrName = ["john1","john2","john3"];
            var arrScore = [100,100,0];
            var arrObj = [{},{},{}];
            
            var arrs = [[1,2],[3,4],[5,6]];//二维数组
            var arrss = [[1,[2]],[3,4],[5,6]];//多维数组
            
        </script>

五、数组排序

<script type="text/javascript">
            //冒泡排序 从小到大
            //数组中的元素两两比较,如果第一个元素比第二个元素大,交换位置,
       然后让第二个和第三个比较,以此类推,第一轮结束后,最大的元素排在了最后
            //然后进行第二轮,两两比较
            var arr1 = [22, 13, 57, 4, 66, 12];
            function bubbleSort(arr) {
             for(var i = 0; i < arr.length - 1; i++) { //外层循环控制轮数
           for(var j = 0; j < arr.length - 1 - i; j++) { //内层循环控制次数
                        if(arr[j] > arr[j + 1]) {
                            var temp = arr[j];
                            arr[j] = arr[j + 1];
                            arr[j + 1] = temp;
                        }
                    }
                }
                return arr;
            }
            console.log(bubbleSort(arr1));
            
   选择排序:
   假设第一个元素为最小值,设一个变量minIndex保存这个值对应的索引,
   然后让最小索引对应值和其他剩余的所有元素进行比较,如果有比minIndex对应的值小
   的,改变minIndex的值,再让minIndex对应的值和剩余的值比较,直至结束,
   第一轮完成能取到一个最小值,和第一个值交换位置
   进行第二轮,假设第二个元素为最小值,以此类推
            function selectSort(arr){
                for(var i = 0; i < arr.length - 1; i++){
                    var minIndex = i;
        for(var j = i+1; j < arr.length; j++){ //确定一个最小值对应的索引
                        if(arr[minIndex] > arr[j]){
                            minIndex = j;
                        }
                    }
                    var temp = arr[i];
                    arr[i] = arr[minIndex];
                    arr[minIndex] = temp;//交换位置
                }
                return arr;
            }
            console.log(selectSort(arr1));
        </script>

六、数组的去重

<script type="text/javascript">
            /*function noRepeat(arr){
                for(var i = 0; i < arr.length-1; i++){
                    for(var j = i+1; j < arr.length; j++){
                        if(arr[i]===arr[j]){
                            arr.splice(j,1);
                            j--;
                        }
                    }
                }
                
                return arr;
            }*/
            
            /*function noRepeat(arr){
                arr.sort();
                for(var i = 0; i < arr.length-1; i++){
                    if(arr[i]===arr[i+1]){
                        arr.splice(i+1,1);
                        i--;
                    }
                }
                
                return arr;
            }*/
            
            //推荐 结合对象和数组的特点
            
            function noRepeat(arr){
                var obj = {}; //把数组的元素看成是对象的属性,
                //如果属性值为undefined,证明不含属性名,可以赋值为1
                //如果下次再次出现属性,证明是重复的值,可以扔掉
                var newArr = [];
                for(var i = 0; i < arr.length; i++){
                    if(obj[arr[i]]===undefined){
                        obj[arr[i]] = 1;
                        newArr.push(arr[i]);
                    }
                }
                
                return newArr;
            }
            
            
            
            console.log(noRepeat([1,1,1,2,2,1,2,3]));
            
        </script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值