个人头像

柠檬酸

1月前来过

控制台
欢迎来到我的博客!
默认封面

00:00/

播放列表

javascript笔记-对js数组的理解

发布于2017-09-23 / 513次浏览

好久没更新博客了。博客缺少实质性的文章和干货,也缺少必要的宣传(根本就没有宣传)所以一直很冷清没人访问也没人留言评论。

不过把博客当成一种网络笔记也挺好,流量啥的,我一点都不在乎。 :razz:

好记性不如烂笔头,写点今天学到的东西。满满的收获,不得不说今天的学习让我对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()

  • 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()

  • 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():对数组进行排序

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

喜欢 1
TAGS:  
本站文章除注明转载/出处外,均为本站原创或翻译。若要转载但请务必注明出处,尊重他人劳动成果。 转载请注明出处链接 : javascript笔记-对js数组的理解

3 条评论

  1. yukun 说道: 来自 Google Chrome 61.0.3163.79 in Windows 7
    2017-09-23 22:51

    一直以为大佬是个可爱的妹子,没想到是个抠脚的汉子

    • 柠檬酸 说道: 来自 Google Chrome 55.0.2883.87 in Windows 8.1
      2017-09-23 22:57

      @yukun 过分了老铁~ :sad:

      • yukun 说道: 来自 Google Chrome 61.0.3163.79 in Windows 7
        2017-09-23 23:07

        @柠檬酸 :wink: 哈哈哈哈