Javascript-Array

1-introduce

  1)每一项都可以保存任何类型的数据。
  2)数组的大小是可以动态调整。
  3)数组的length属性:可读可写,可以通过设置length的值从数组的末尾移除项或向数组中添加新项

2-define

  1)  var arr = new Array();
    > var arr = new Array(20);  // 预先指定数组的大小
    > var arr = new Array("terry","larry","boss");//传入参数
  2)  var arr = ["terry","larry","boss"];

3-visit elements of Array

//数组最多可以包含4 294 967 295个项
//var arr = new Array();
  arr[index]; //element undefined 添加新元素
    》var arr = ["terry","larry","boss"];
	    arr[3] ="jacky";		//添加元素,数组长度变为4

4-数组的方法

1)数组检测

arr instanceof Array //对于一个网页或者一个全局作用域使用
Array.isArray(arr) //网页中包含多个框架、不同的全局执行环境

 var arr = [];
 var arr1 = "string";
 console.log(arr instanceof Array);//true
 console.log(arr instanceof Object);//false
 console.log(Array.isArray(arr));//true

2)数组长度

       >arr.length
        //该方法可以从数组末尾移项或者向数组中添加项目 
        //该方法也可以修改数组的大小
  
   var arr = ['a','v','d'];
    arr.length = 2;
    console.log(arr);//[ 'a', 'v' ]
    var arr1 = ['a','v','d'];
    arr.length = 5;
    console.log(arr1); //[ 'a', 'v', 'd', <2 empty items> ]

3)数组的遍历

>for-in  
    var arr = ['1','d','m'];
    for (var key in arr){
      console.log(arr[key]);
    }//key 是索引
>while
>do-while

4) 数组的构造
Array.prototype //构造函数的原型

5)数组的序列化`将数组转换为字符串.

>toString()
  arr.toString();
>join()
  arr.join();//可以通过任意字符链接
>JSON.stringify()
  JSON.stringify(arr);
---------------------------------------
  var arr = [1,2,3,4];
  console.log(arr.toString()); //1,2,3,4
  console.log(arr.join()); //1,2,3,4
  console.log(arr.join(-)); //1-2-3-4
  console.log(JSON.stringify(arr)); //[1,2,3,4]

6)数组的反转`arr.reverse();

  提问:如何将字符串反转?
    1 把字符串通过split('')将字符串切割成数组
    2 将数组元素反转
    3 将反转好的数组元素拼接成字符串
  var str = 'hello';
  var res = str.split('').reverse().join('');
  console.log(res);

7)数组的排序`arr.sort()

1)默认排序:该方法会调用每个数组项的toString() 方法,然后按照字符序列排序
  var arr = [12,34,56,4];
  console.log(arr.sort());// [12,34,4,56]

2)自定义排序:

a.该方法可以接受一个比较函数作为参数,比较函数有两个参数
b.如果第一个参数位于第二个参数之前,返回负数
c.如果第一个参数位于第二个参数之后,返回正数 
      var arr = [12,34,56,4];
      var res = arr.sort(function(a,b){
        return a>b?1:-1;
      })// 1:从小到大排序 2:从大到小排序
      console.log(res);//[ 4, 12, 34, 56 ]

      var arr = [12,34,56,4]; 
      var res = arr.sort(function(a,b){
        return a>b?-1:1;
      })// 1:从小到大排序 2:从大到小排序
      console.log(res);//[ 56, 34, 12, 4 ]

8)数组迭代`数组自己提供的方法

五个遍历方法都三个参数的匿名函数,
      >item:
      >index;
      >arr:
forEach(function(item,index,arr){}) //对数组中的每一元素运行给定的函数,没有返回值,常用来遍历元素
map(function(item,index,arr){}) //对数组中的每一元素运行给定的函数,返回每次函数调用的结果组成的数组
every(function(item,index,arr){})
filter(function(item,index,arr){})//对数组中的每一项运行给定的函数,会返回满足该函数的项组成的数组
some(function(item,index,arr){})

 var arr = ['a','d','s','e'];
 arr.forEach(function(item,index,arr){//forEach函数没有返回值.
   console.log(item,index,arr);
 });
 输出:a 0 [ 'a', 'd', 's', 'e' ]
     d 1 [ 'a', 'd', 's', 'e' ]
     s 2 [ 'a', 'd', 's', 'e' ]
     e 3 [ 'a', 'd', 's', 'e' ]

 var arr = [4,'d','s',23];
 var result = arr.map(function(item,index,arr){
     return item * 2;
 });
 console.log(result);
 输出:[ 2, NaN, NaN, 46 ]

 var arr1 = [4,0,13,23];
 var result1 = arr1.filter(function(item,index,arr1){
     return item > 4;
 });
 console.log(result1);
 输出:[ 13,23 ]

 var arr1 = [4,0,13,23];
 var result1 = arr1.some(function(item,index,arr1){
     return item > 4;
 });
 console.log(result1);
 输出:true

9)数组的元素的增删改

    >push()
      //在数组后放新增元素
      //新增元素
      //返回值:新增完元素后数组的长度
    >unshift()
      //在数组前方仅新增一个元素
      //返回值:新增完元素后数组的长度
      //参数:新增元素
    >pop()
      //在数组后放仅删除一个元素
      //返回值:被删除的元素
      //参数:无
    >shift()
      //在数组前方仅删除一个元素
      //返回值:被删除的元素
      //参数:无
    >concat()
      //拼接两个数组
      //参数:需要拼接的的数组(可以有多个数组用,隔开)
      //返回值:拼接好的新数组
    >可以通过Array.prototype 函数名 = function(){} 重构函数
    > slice() ——> 不会改变原数组
  定义:切割数组
  参数:
      一个参数:表示从当前参数指定位置开始【索引】,截取数组,一直到数组结尾;
      两个参数:表示截取两个参数之间的元素【不包含结束位置上的元素】;
  返回值:截取到的元素组成的新数组,如果没有截取到元素,则返回空数组

      var arr = [1,2,3];
       var res = arr.slice(1);
       console.log(arr);           //[ 1, 2, 3 ]
       console.log(res);           //[ 2, 3 ]

       var arr = [1,2,3];
       var res = arr.slice(5);
       console.log(arr);           //[ 1, 2, 3 ]
       console.log(res);           //[]

       var arr = [1,2,3,4,5,6];
       var res = arr.slice(2,4);
       console.log(arr);           //[ 1, 2, 3, 4, 5, 6 ]
       console.log(res);           //[ 3, 4 ]

splice() ——>
定义:对数组进行删除、替换、插入的操作
参数:
删除:指定两个参数(起始位置,要删除的项数)
var arr = [1,2,3,4,5,6];
var res = arr.splice(2,1);
console.log(arr); //[ 1, 2, 4, 5, 6 ]
console.log(res); //[ 3 ]
返回值:被删除的元素组成的新数组

  插入:指定三个参数(起始位置,0,要插入的任意数量的项)
      var arr = [1,2,3,4,5,6];
      var res = arr.splice(2,0,'a','b');
      console.log(arr);                   //[ 1, 2, 'a', 'b', 3, 4, 5, 6 ]
      console.log(res);                   //[]
  返回值:空数组

  替换:指定三个参数(起始位置,要删除的项数,要插入的任意数量的项)
      var arr = [1,2,3,4,5,6];
      var res = arr.splice(2,3,'a','b');
      console.log(arr);                   //[ 1, 2, 'a', 'b', 6 ]
      console.log(res);                   //[ 3, 4, 5 ]
  返回值:被删除的元素组成的新数组

5-数组元素的检测

 indexOf()
     定义:查找数组中的元素
     参数:需要查找的元素
     返回值:
         如果元素在数组中存在,则返回元素在数组中首次出现时的索引位置;
         如果元素在数组中不存在,则返回-1;

     var arr = [1,2,3,1,2,3];
     var res1 = arr.indexOf(1);
     var res2 = arr.indexOf(2);
     var res3 = arr.indexOf(3);
     var res4 = arr.indexOf(4);
     console.log(arr);
     console.log(res1);      //0
     console.log(res2);      //1
     console.log(res3);      //2
     console.log(res4);      //-1

5-API

  数组的api由实例调用
  var arr = new Array()// arr :实例,可以调用构造函数原型上面的方法
                          Array:构造函数
                          Array.prototype :构造原型函数

例题:

console.log(’---------------自己造一个函数--------------------’);
// 随便输入数据添加到数组结尾
var arr1 = [1,2,3];
Array.prototype.myPush = function(){
console.log(arguments.length);//传递参数的个数
for(var i=0; i<arguments.length;i++){
this[this.length] = arguments[i];
}
return this.length;
};
// 随便输入数据添加到数组开头
Array.prototype.myUnShift = function(){
for(var j=0; j<arguments.length; j++){
this.unshift(arguments[j]);
}
return this.length;
};

//myShift()数组出队
Array.prototype.myShift = function(){
if (this.length == 0) {
return undefined;
}
var firstElement = this[0];
for(var i = 1 ; i < this.length ; i++){
this[i-1] = this[i];
}
this.length = this.length-1;
return firstElement;
}

//myUnshift 数组入队
Array.prototype.myUnshift = function(){
var L = this.length;
for(var i = L + arguments.length - 1 ; i >= 0 ; i–){
if(i > arguments.length - 1){
this[i] = this[i - arguments.length];
}else{
this[i] = arguments[i];
}
}
return this.length;
}

var res2 = arr1.myPush(3,5);
console.log(arr1);
console.log(res2);
var res3 = arr1.myUnShift(3,5);
console.log(arr1);
console.log(res3);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值