2017-01-19 javascript厉害的Array

60 阅读2分钟

(自己的老博客搬运)createdAt:2017-01-19 11:14:03


摘要

虽然javascript数据类型少,但是功能还是挺多的~

比如Array类型!又可以当栈又可以当队列^o^

而且Array还有一个特点是:一个Array里面的每一项都可以是不同的类型~~也算是一个有利有弊的特性吧~~

能当栈又能当队列

为了实现这一点,javascript的Array有4个方法, 分别是:pop, push, shift, unshift。

作用分别是对Array尾部弹出一项、尾部添加N项、头部弹出一项、头部添加N项。(N>=1)

返回值分别是弹出项、Array的最新长度、弹出项、Array的最新长度。

于是!基于这4个操作~

  • pop和push组合,或shift和unshift,就可以模拟出 的操作
  • pop和unshift组合,或shift和push, 就可以模拟出 队列 的操作

下面看看例子吧~

var array=['aaa','bbb','ccc','ddd'];
console.log('original array: '+array);
var x=array.push('ccc');
console.log(x);     //5
console.log(array); //aaa,bbb,ccc,ddd,ccc
var y=array.push('eee','fff');
console.log(y);     //7
console.log(array); //aaa,bbb,ccc,ddd,ccc,eee,fff
var z=array.pop();
console.log(z);     //fff
console.log(array); //aaa,bbb,ccc,ddd,ccc,eee
var m=array.shift();
console.log(m);     //aaa
console.log(array); //bbb,ccc,ddd,ccc,eee
var n=array.unshift('ggg');
console.log(n);     //6
console.log(array); //ggg,bbb,ccc,ddd,ccc,eee
var p=array.unshift('hhh','iii');
console.log(p);     //8
console.log(array); //hhh,iii,ggg,bbb,ccc,ddd,ccc,eee
// 这最后一种情况要注意一下~
// 我原本以为会是 iii,hhh,...的,
// 因为想的是按照插入的顺序,先在头部插入hhh,再在头部插入iii嘛
// 结果hhh在iii的前面了。
// 再经思考,
// 觉得这大概跟'javascript的函数所有参数其实是一个数组'有关,
//(就是在实现上,函数的参数会合并起来成为一个数组,就是`arguments`,在函数内部可以通过arguments[i]依次访问传入的参数~~ 虽然严格来讲它不是数组,是类数组,但这里就不多说啦)
// 于是这里hhh,iii被看成一个数组,直接插入到原数组头部

想看源码可以戳这里^ ^(还包含javascript系列的其他部分的源码哦~~)~


参考:

  • 《Javascript高级程序设计》第2版--Nicholas C. Zakas 第5章