00:00/
发布于2017-09-23 / 1268次浏览
好久没更新博客了。博客缺少实质性的文章和干货,也缺少必要的宣传(根本就没有宣传)所以一直很冷清没人访问也没人留言评论。
不过把博客当成一种网络笔记也挺好,流量啥的,我一点都不在乎。
好记性不如烂笔头,写点今天学到的东西。满满的收获,不得不说今天的学习让我对js的数组的理解有了很大的帮助。
var arr=new Array(); 可以传一个数字规定数组的长度
var arr=[1,2,3];
var arr=['蓝色','红色','灰色'];
var arr=new Array("红色","蓝色","灰色");
if(arr instanceof Array){ //arr是Array类型吗?
//dosomething
}
arr.isArray()
arr.toString();
栈(LIFO):push(),pop()
var arr=new Array();
var count=arr.push("红色","蓝色");
console.log(arr.toString()); //(添加了)红色,蓝色
console.log(count); //2
var result=arr.pop();
console.log(arr.toString()); //红色
console.log(result); //(删除了)蓝色
队列(FIFO):shift(),unshift()
var arr=new Array("红色","蓝色","灰色");
var count=arr.unshift("白色","黑色");
console.log(arr.toString()); //白色,黑色,红色,蓝色,灰色
console.log(count); //5
var result=arr.shift();
console.log(arr.toString()); //黑色,红色,蓝色,灰色
console.log(result); //(删除了)白色
reverse(),sort() 都会影响到原先的数组
使用sort()进行排序时,函数会自动调用toString()函数,将数组的各个字段转换成字符串。
所以如果仅仅使用sort()函数排序而不传入任何参数,将会按照ASCII码进行排序,结果往往不会如你所愿。例如:
var arr=new Array(1,8,4,6,9);
arr.sort();
console.log(arr.toString()); //1,4,6,8,9没问题
var arr=new Array(1,10,8,5,9);
arr.sort();
console.log(arr.toString()); //1,10,5,8,9出问题了
为了解决这问题,我们应该写一个自定的比较函数,并以参数的形式传入sort();
function desc(a,b){
if(a>b){
return -1;
}
else if(a<b){
return 1;
}
else{
return 0;
}
}
当然可以化简成:
function desc(a,b){
return b-a;
}
function asc(a,b){
return a>b;
}
这里的return值的意思是:
如果第一个参数应该位于第二个参数的前面(降序),就返回一个负数。
如果第一个参数等于第二个参数,就返回0
如果第一个参数应该位于第二个参数的后面(升序),就返回一个正数。
如果觉得很绕,记住a-b是升序,b-a是降序就行了。
var arr=new Array(1,10,8,5,9);
arr.sort(desc);
console.log(arr.toString());
sort同样支持对象数组排序:
function desc(a,b){
return b.age-a.age;
}
var employees=new Array(4);
employees[0]={name:"George", age:32, retiredate:"March 12, 2014"}
employees[1]={name:"Edward", age:17, retiredate:"June 2, 2023"}
employees[2]={name:"Christine", age:58, retiredate:"December 20, 2036"}
employees[3]={name:"Sarah", age:62, retiredate:"April 30, 2020"}
employees.sort(desc);
console.log(employees); //根据age降序排序对象数组
concat():复制一个数组,如果传入参数,就把参数添加到这个数组的尾部。(不会影响到原先的数组)
var arr=new Array(1,5,8,6,10);
var arr2=arr.concat();
var arr3=arr.concat("hello","world");
console.log(arr.toString()); //1,5,8,6,10
console.log(arr2.toString()); //1,5,8,6,10
console.log(arr3.toString()); //1,5,8,6,10,hello,world
slice(a,b):从a位置开始复制到b位置(不包括b)。
刚开始还以为b是复制的长度,但是并不是我想的那样。slice(1,3)的意思是从数组的第2项开始,复制到数组的第4项,但是不包括第4项。如下:
var arr=new Array(0,1,2,3,4,5);
var arr2=arr.slice(1,3);
console.log(arr2.toString()); //1,2
splice(a,b,x):集删除,插入,替换为一体的函数
a,b,x三个参数对应的是:起始位置,要删除的个数,要插入的值,splice()函数会返还它删除的数组!是数组!
x可以是任意个值,看案例:
var arr=new Array(1,5,8,6,10);
var arr2=arr.splice(1,2);
console.log(arr.toString()); //1,6,10
console.log(arr2.toString()); //5,8
indexOf(),lastIndexOf()
indexOf(a,b):a是要查找的值,b是开始查找的位子。indexOf()是从0开始往后查找,lastIndexOf()则是从数组末尾开始,找到就返回第一次找到的值的位子。查找时函数会运用全等运算符进行判断。
var arr=new Array(1,5,8,6,10,6,8);
console.log(arr.indexOf(6)) //3
console.log(arr.indexOf(6,3)) //5
一直以为大佬是个可爱的妹子,没想到是个抠脚的汉子
@yukun 过分了老铁~
@柠檬酸
哈哈哈哈