zoukankan      html  css  js  c++  java
  • chrome原生方法之数组

    由于各浏览器的js实现不同,因此各浏览器的原生对象(这里不涉及DOM实现,当然这也有区别)的原生方法也不尽相同,采用原生方法的好处显而易见,使用兼有效率,而且其中有些方法可能包含在以后的ECMAscript规范中。

    下面看一下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从右往左的实现

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

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

    View Code
    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>




  • 相关阅读:
    一维数组的 K-Means 聚类算法理解
    c#计算2个字符串的相似度
    一个人开发的html整站源码分享网站就这么上线了
    html页面显示服务器时间
    禁用浏览器自动填充表单解决办法
    布隆过滤器
    (转)二进制与三进制趣题
    随机算法_模拟退火算法
    NAT穿越
    (转)为什么所有浏览器的userAgent都带Mozilla
  • 原文地址:https://www.cnblogs.com/xesam/p/2267458.html
Copyright © 2011-2022 走看看