JS数组
最近才开始写博客,主要是发现自己学的很多东西都忘掉了,
正好可以回忆复习一下。唉😔,真是学多少忘多少。
数组
数组的定义
var arr=[];
var arr= new Array();
这两个基本没什么区别,但是第二个new Array()里面只传了一个参数时,他会将其当作数组的长度而不是第一位的值。
数组的读和写
javascript的数组是基于对象的,所以平时哪怕没有赋值也就是undefined,并不会报错。
数组的常用方法
ES3.0:
改变原数组
push,pop,shift,unshift , sort , reverse , splice
push()
向数组添加数据的方法,在数组的最后一位添加数据
重写一下push方法:
Array.prototype.push = function () {
for(var i=0; i<arguments.length; i++){
this[this.length] = arguments[i];
length++;
}
}
pop()
数组剪切数据的方法,把数组最后一位剪切出来,不需要传参,也没用
shift()和unshift()
unshift()是增加数据,与push不同的是它是在数组的前面添加数据
shift()是减数据,也是在前面减。
reverse()
将原数组逆转,并返回来
splice()
arr.splice(从第几位开始,截取多少长度,在切口处添加新的数据):也是一种剪切
可以用其在指定位置添加数据
sort()
用来给数组排序,且为升序排序但是以ACSCII码来排序
因为排序会有很多种排序,所以sort预留了一个编程接口可以在sort里面填一个匿名的function,可以让sort方法按function里面的来排序
规则:
1.必须写两个形参
2.看返回值
当返回值为负数时:那么前面的数放在前面
当返回值为整数时:那么后面的数放在前面
为0时,不动
举个栗子:
//升序
var arr=[1,10,2,5,3,4,40,];
arr.sort(function(a,b){
return a-b;
})
//降序
var arr=[1,10,2,5,3,4,40,];
arr.sort(function(a,b){
return b-a;
})
这段代码是简化后的代码,至于为什么升序降序自己想一下吧,嘿嘿嘿。
//给一个有序数组,让他乱序
var arr=[1,2,3,4,5,6,7];
arr.sort(function(){
return Math.random()-0.5;
})
不改变原数组
concat , join–>split,toString,slice
concat()
连接两个数组,在一个数组后面连接另一个数组
var arr=[1,2,3,4,5];
var arr1=[2,3,4,6];
arr2=arr.concat(arr1);
console.log(arr);
console.log(arr1);
console.log(arr2);
join–>split()
数组.join(“参数”):按照参数来连接数组
split(参数)是字符串的方法,可以将字符串拆分成数组
二者是互逆的
toString()
将数组转化成字符串
slice()
slice(从第一位开始截取,截取到该位)
slice(从第几位开始一直截取到最后)
类数组
(长得像数组,可以当数组用,但它并不是数组)
- 可以利用属性名模拟数组的特性
- 可以动态的增长length属性
- 可以强行让类数组调用push方法,则会根据length属性值的位置进行属性的全扩充
属性要为索引(数字属性),必须有length属性,最好加上push
例:
var obj={
"0":"a",
"1":"b",
"2":"c",
"length":3,
"push": Array.prototype.push,
"splice":Array.prototype.splice
}
类数组填充题:
var obj={
"2":"a",
"3":"b",
"length":2,
"push": Array.prototype.push,
}
obj.push('c');
obj.push('d');
//问:调用完两个push后obj是什么样子的
答案:
这里设计到了push的方法,push是将需要push的值传入到数组的obj.length然后length再++
可以参考上面的push()方法