chrome原生方法之数组

  下面看一下chrome/15实现的一些数组方法

  ---------------------------------------------------------------------------------------------

  concat:这个好说,唯一需要注意的就是concat不是就地修改的,是指返回链接后的结果,另外一点是指回展开第一层数组

  join:连接数组

  pop:出栈操作,注意这个也是就地修改原数组

  push: 入栈操作,注意这个也是就地修改原数组

  reverse: 倒序数组,注意这个也是就地修改原数组

  shift: 出队操作,注意这个也是就地修改原数组

  unshift: 在数组头部插入一项,后面的以此后移

  slice: 截取数组的一部分,里一个常见的操作是用这个方法把类数组转化为真正的数组

  splice:修改数组,可以用来插入新项,注意这个也是就地修改原数组

  sort: 数组排序,注意这个也是就地修改原数组

  toLocaleString:返回数组的本地字符串形式,一般是用逗号

  toString: 返回数组的字符串形式,一般是用逗号

  ---------------------------------------------------------------------------------------------

  isArray:判断一个变量是不是数组,注意,这个是个静态方法,调用形式Array.isArray()

  ---------------------------------------------------------------------------------------------

  every:判断一个数组里面的项是不是都满足条件,如果全部满足条件,返回true,否则返回false

  some: 这个可以跟every联系起来,every要求全部为true最后才为true,some只要有一项为true,返回就为true

  filter:按照给定条件从数组里筛选出符合条件的项,然后作为新的数组返回,否则返回null

  forEach:对数组中的每一项一次执行给定的操作

  indexOf:返回给定项在数组中的第一个位置(从0下标开始)

  lastIndexOf:与indexOf相反

  map:对数组中的每一项一次执行给定的操作并返回修改后的数组

  reduce:reduce(func,init) func为二元函数,将func作用于seq序列的元素,每次携带一对(先前的结果以及下一个序列的元素),连续的将现有的结果和下一个值作用在获得的随后的结果上,最后减少我们的序列为一个单一的返回值。

  reduceRight:reduce从右往左的实现

  ---------------------------------------------------------------------------------------------

  当我们实现自己的小型库或者一些工具时,也可以稍微扩展一下

  

复制代码 代码如下:

  Object.prototype.extend = function(src){

  for(var i in src){

  this[i] = src[i];

  }

  }

  Array.extend({

  toArray : function(arrayLike){

  try{

  return [].slice.call(arrayLike);

  }catch(ex){

  var ret = [];

  for(var i = 0,len = arrayLike.length ; i < len ; i++){

  ret.push(arrayLike[i]);

  }

  }

  },

  isArray : (Array.isArray)?Array.isArray:function(ele){

  return ele.constructor == Array;

  }

  })

  Array.prototype.extend((function(){

  var each = Array.prototype.forEach || function(fn,obj){

  for(var i = 0,len = this.length ; i < len ; i++){

  fn.call(obj,this[i]);

  }

  };

  var filter = Array.prototype.filter || function(fn,obj){

  var result = [];

  for(var i = 0,len = this.length ; i < len ; i++){

  if(fn.call(obj,this[i])){

  result.push(this[i]);

  }

  }

  return result;

  };

  var every = Array.prototype.every || function(fn,obj){

  for(var i = 0,len = this.length ; i < len ; i++){

  if(!fn.call(obj,this[i])){

  return false;

  }

  }

  return true;

  };

  var some = Array.prototype.some || function(fn,obj){

  for(var i = 0,len = this.length ; i < len ; i++){

  if(fn.call(obj,this[i])){

  return true;

  }

  }

  return false;

  };

  var indexOf = Array.prototype.indexOf || function(dest){

  for(var i = 0; i < this.length ;i++){

  if(dest == this[i]){

  return i;

  }

  }

  return -1;

  };

  var map = Array.prototype.map || function(fn,obj){

  var result = [];

  for(var i = 0,len = this.length ; i < len ; i++){

  result.push(fn.call(obj,this[i]));

  }

  return result;

  };

  var reduce =Array.prototype.reduce || function(fn,init){

  var result = init || this[0];

  for(var i = 0; i < this.length; i++){

  result = fn(result,this[i]);

  }

  return result;

  }

  return {

  map : map,

  each : each,

  some : some,

  every : every,

  filter : filter,

  indexOf: indexOf,

  reduce : reduce

  }

  })())

  下面是一个小例子,给指定ul下面的li设置内容:

  

复制代码 代码如下:

  <ul id="test">

  <li></li>

  <li></li>

  <li></li>

  </ul>

  <script type="text/javascript">

  Array.prototype.slice.call(document.getElementById('test').getElementsByTagName('li'),0).each(function(li){

  li.innerHTML = '测试each';

  })

  </script>