数组

209 阅读2分钟

一.数组的定义:两种方式

1.数组字面量var arr = [];
2.系统提供的构造方法 var arr = new Array();
数组的方法来源于Array.prototype

例一

var arr = [1,2,,,,3,4]//----不是每位都有值-稀松数组

数组例1-06-07 205933.jpg

例二

var arr = new Array(1,3,4,6,7,8);

例3

// var arr1 = new Array(10.2);//报错,长度只能识别整数
var arr = new Array(10);//创建一个长度为10的空数组,这样创建.只有一个参数的时候会被当作长度[empty*10]
var arr2 =[10];//[10]

例3-06-08 142821.jpg

二.数组的读和写(比较松散,基本没有报错的地方)

1.arr[num] //不可以溢出读,结果是undefined

2.arr[num]=xxx //可以溢出写

例子

var arr =[];//arr[10]=undefined

js里面的数组是基于对象的,一种特殊对象

三.数组常用方法

1.改变原数组 push/pop/shift/unshift/sort/reverse/splice

例1 push和pop此例用--var arr = [1,2] arr.push例子-06-07 225211.jpg

var arr = [1,2,3,4];//数组是引用值,可以访问方法
Array.prototype.push = function() {
    for(var i = 0;i <arguments.length;i ++){//遍历arguments,每个都拿出来往里面添
        this[this.length] = arguments[i];
    }
    return this.length;
}

arr.push例106-08 074519.jpg

arr.push-return this.length-06-08 074837.jpg

arr.pop-08 075205.jpg

arr.pop-06-08 075551.jpg

arr.unshift-06-08 080012.jpg

arr.reverse-06-08 081010.jpg

例2 splice方法 var arr = [1,2,3,4,5,6]; arr.splice(从第几位开始,截取多少长度,在切口处添加新的数据)

数组一般都可以带负数,在数组内部怎么实现负数

splice = function (pos){
    pos += pos >0? 0:this.length;
}//-1+6=5,+length

arr.splice-06-08 082753.jpg

arr.splice-06-08 081543.jpg

例3 sort方法--可以排序

var arr = [3,6,7,1,2,0,-1,9];

arr.sort排序-06-08 090949.jpg

arr.sort-asc码-06-08 105421.jpg

例4 用规则排序

1.必须写两个形参
2.规则:看返回值
1)当返回值为负数时,前面的值放前面
2)当返回值为正数时,后面的数在前面
3)返回值为0时,不动
var arr = [1,5,3,8,6,10];
arr.sort(function (a,b) {
    if(a - b > 0) {
        return a - b;
    }else {a - b < 0
        return a - b;
    }
});//运行完以后是一个升序arr=[1,3,5,6,8,10]

例5 --------->通用公式

var arr = [20,2,10,13,4,8,9];
arr.sort(function(a,b){
    // return a-b;//升序
    return b-a;//降序
})

例6,用sort可以排序,也可以乱序

var arr =[1,2,3,4,5,6,7,8,9];
arr.sort(function () {
    return Math.random() - 0.5;
});

例7 按年龄排序

var cheng = {
    name :"cheng",
    age:18
}
var deng = {
    name:"deng",
    age:32
}
var zhang = {
    name:"zhang",
    age:20
}
var arr = [cheng,deng,zhang];
arr.sort(function(a,b) {
    return a.age - b.age;
});

例7,对象的排序例子-06-08 113152.jpg

例8 按字节长度排序

function retBytes(str){
    var num = str.length;
    for(var i = 0;i < str.length; i++) {
         if(str.charCodeAt(i) > 255) {
             num ++;
      }
    }
    return num;
}
var arr = ['a等','ccc从','ba吧','sdeefdsaefev','fgbvf','额eee','ddww'];
arr.sort(function (a,b) {
    return retBytes(a) - retBytes(b);
});

例8-06-08 114521.jpg

// 2.不改变原数组
concat/join/--->split,toString,slice

concat连接两个数组

arr.concat-06-08 115239.jpg

例9

var arr = [1,2,3,4,5,6];
var arr1 = [7,8,9,10];

数组toString,把数组变成字符串 例9arr.toString = "1,2,3,4,5,6"

slice(从该位开始截取,截取到该位)

var arr =[1,2,3,4,5,6];
var newArr = arr.slice(1,3);//slice不可以改变原数组,关注返回值,拿东西接收
var newArr = arr.slice(-4)//从-4+6=2位开始--->3,4,5,6
var newArr = arr.slice();//整个截取

arr.slice-06-08 120538.jpg

例10

 var arr = [1,2,3,4,5,6];
join可以传参数,返回字符串形式
字符串里面split可以拆分成数组
var str = arr.join("-");
split和join互逆,

splice-06-08 132414.jpg

例11,题

var str = "alibaba";
var str1 = "baidu";
var str2 = "tencent";
var str3 = "toutiao";
var str4 = "zijie";
var str5 = "taobao";
var arr = [str,str1,str2,str3,str4,str5];
join里面传与不传 ''的差距
console.log(arr.join());//alibaba,baidu,tencent,toutiao,zijie,taobao
console.log(arr.join(''));//alibababaidutencenttoutiaozijietaobao