js数组和类数组

目录

1.数组定义

2.数组常用方法

2.1改变原数组

push添加

pop弹出数组最后一位

shift 和 unshift

reverse改变原数组顺序,反过来

splice

sort

2.2不改变原数组

concat 连接数组,返回新的数组

slice

join 和 split

3.类数组


1.数组定义

//数组定义
var arr1 = [, ];

var arr2 = new Array(); //系统提供构造方法
//数组所有方法来自 Array.prototype

var arr = new Array(10);
console.log(arr.length);//打印10
var arr1 = [, ];
console.log(arr1.length + ": " + arr1[0]); //打印1 : undefined

var arr2 = [1, , 1];
console.log(arr2.length + ": " + arr2[0] + " " + arr2[1] + " " + arr2[2]); 
//打印3: 1  undefined 1

 

//数组的读和写
var arr = [10];
console.log(arr[1]);//读溢出,打印undefined

 

2.数组常用方法

2.1改变原数组

push添加

var arr = new Array();

arr.push(10);
arr.push(11);

arr.push(5,4,3,2,1);

console.log(arr);//打印10 11 5 4 3 2 1 

 

pop弹出数组最后一位

var arr = [1, 2, 3];
console.log(arr.pop()); //打印3
console.log(arr); //打印1 2

 

shift 和 unshift

shift是弹出数组第0位

var arr = [1,2,3];
console.log(arr.shift());//打印1
console.log(arr);//打印2 3

unshift 是在最前面加数字

var arr = [1,2,3];
arr.unshift(0);
arr.unshift(-2,-1);
console.log(arr);//打印-2 -1 0 1 2 3

 

reverse改变原数组顺序,反过来

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

arr.reverse();
console.log(arr);//打印3 2 1

 

splice

方法的参数:splice(第几位开始,截取多少长度,在切口处添加新的数据)

前两参数是必须的;

var arr = [1,1,2,2,3,3];
console.log(arr.splice(0,2));//打印1 1

console.log(arr);//打印2 2 3 3
//1
var arr = [1,1,2,2,3,3];
arr.splice(0,2,10,11);
console.log(arr);//打印10 11 2 2 3 3 

//2
var arr2 = [1,1,2,2,3,3];     
arr2.splice(1,2,10,11);
console.log(arr2);//打印1 10 11 2 3 3

若负数位的情况:

var arr = [1,1,2,2,3,3];     
console.log(arr.splice(-1,1,10,11));//打印3,这里的 -1 表示倒数第一位
console.log(arr);//打印10 11 2 2 3 3 

 

sort

类似stl的sort,进行排序,默认按照ASCII码排序的

var arr = [5,9,1,-2,3,0];     
arr.sort();
console.log(arr);//打印-2, 0, 1, 3, 5, 9

 

var arr = [1,3,5,4,10];     
arr.sort();
console.log(arr);//打印1,10,3,4,5,实际是按照ASCII码排序的

 

同样也可以加比较器进行按照自定义排序

var arr = [1, 3, 5, 4, 10];

//1.function必须写两个形参
//2.当返回值负数,前面的数放前面
//3.当正数,后面的数放前面
arr.sort(function(a, b) {
    //return (a < b) ? -1 : 1;
    return a - b;//升序
});

console.log(arr); //打印[1, 3, 4, 5, 10]

 

 

2.2不改变原数组

concat 连接数组,返回新的数组

var arr1 = [1, 2, 3];
var arr2 = [7, 8, 9];
var arr3 = arr1.concat(arr2);

//不改变原数组
console.log(arr1); //1 2 3
console.log(arr2); //7 8 9

console.log(arr3); //1 2 3 7 8 9

 

slice

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

第一个参数必须添加

var arr = [1, 2, 3];

var arr2 = arr.slice(0, 1); //从0位开始,截取到第1位
console.log(arr2); //打印 1

var arr3 = arr.slice(0, 2); //从0位开始,截取到第2位
console.log(arr3); //打印1 2

var arr4 = arr.slice(1); //从第1位开始全部截取
console.log(arr4); //打印 2 3

var arr5 = arr.slice(-2);//从倒数第二开始全部截取,倒数第二为2
console.log(arr5);//打印 2 3

 

join 和 split

var arr = [1, 2, 3];

var s = arr.join("!");
console.log(s); //返回字符串1!2!3,用 ! 连接
//如果直接 arr.join();那么会以逗号 ',' 连接

//split,为逆过程
var arr2 = s.split("!");
console.log(arr2); //打印["1", "2", "3"]

var arr3 = s.split("2");
console.log(arr3); //打印["1!", "!3"]

关于这两个的应用

var str = 'acd';
var str1 = 'ggg';
var str2 = 'jhjj';
var str3 = 'ddd';

var arr = [str, str1, str2, str3];
console.log(arr.join());

 

3.类数组

既可以像数组一样用,又可以像类一样用

//必须写 length 属性
var obj = {
    "0": "a",
    "1": "b",
    "2": "c",
    "length": 3,
    "push": Array.prototype.push,
    "splice": Array.prototype.splice
}

console.log(obj);
obj.push("d");
console.log(obj.length); //打印4,模仿出了Array的功能

/*
      对于 push 底层方法如下:
      Array.prototype.push = function(target){
         obj[obj,length] = target;
         obj.length++;
      }
      由于找到了我们自己定义的 length ,所以加 1
*/

 

关于类数组习题练习

var obj = {
    "2": "a",
    "3": "b",
    "length": 2,
    "push": Array.prototype.push,
    "splice": Array.prototype.splice
}
obj.push('c');
obj.push('d');

//问题:obj对象此时变成了什么?

/*答:可以看push底层方法,加入 'c',执行obj[2] = 'c',length = 3;
      同理,加入 'd',obj[3] = 'd',length = 4;
      所以:
        obj = {
          "2":"c",
          "3":"d",
          "length":4,
          "push":Array.prototype.push,
          "splice":Array.prototype.splice
        }
*/

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值