最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript Array擴展實現(xiàn)代碼

 更新時間:2009年10月14日 19:24:47   作者:  
最近看了一下developer.mozilla.org里的東西,發(fā)現(xiàn)它為Array對象添加了不少generic method,趕得上Prototype的熱心程度。
indexOf
返回元素在數(shù)組的索引,沒有則返回-1。與string的indexOf方法差不多。
如果其他瀏覽器沒有實現(xiàn)此方法,可以用以下代碼實現(xiàn)兼容:
復制代碼 代碼如下:

Array.prototype.indexOf = function(el, start) {
    var start = start || 0;
    for ( var i=0; i < this.length; ++i ) {
        if ( this[i] === el ) {
            return i;
        }
    }
    return -1;
};
var array = [2, 5, 9];
var index = array.indexOf(2);
// index is 0
index = array.indexOf(7);
// index is -1

lastIndexOf
與string的lastIndexOf方法差不多。
如果其他瀏覽器沒有實現(xiàn)此方法,可以用以下代碼實現(xiàn)兼容:
復制代碼 代碼如下:

Array.prototype.indexOf = function(el, start) {
    var start = start || 0;
    for ( var i=0; i < this.length; ++i ) {
        if ( this[i] === el ) {
            return i;
        }
    }
    return -1;
};

forEach
各類庫中都實現(xiàn)相似的each方法。
如果其他瀏覽器沒有實現(xiàn)此方法,可以用以下代碼實現(xiàn)兼容:
復制代碼 代碼如下:

Array.prototype.forEach = function(fn, thisObj) {
    var scope = thisObj || window;
    for ( var i=0, j=this.length; i < j; ++i ) {
        fn.call(scope, this[i], i, this);
    }
};
function printElt(element, index, array) {
    print("[" + index + "] is " + element); // assumes print is already defined
}
[2, 5, 9].forEach(printElt);
// Prints:
// [0] is 2
// [1] is 5
// [2] is 9

every
如果數(shù)組中的每個元素都能通過給定的函數(shù)的測試,則返回true,反之false。換言之給定的函數(shù)也一定要返回true與false
如果其他瀏覽器沒有實現(xiàn)此方法,可以用以下代碼實現(xiàn)兼容:
復制代碼 代碼如下:

Array.prototype.every = function(fn, thisObj) {
    var scope = thisObj || window;
    for ( var i=0, j=this.length; i < j; ++i ) {
        if ( !fn.call(scope, this[i], i, this) ) {
            return false;
        }
    }
    return true;
};
function isBigEnough(element, index, array) {
  return (element <= 10);
}
var passed = [12, 5, 8, 130, 44].every(isBigEnough);
// passed is false
passed = [12, 54, 18, 130, 44].every(isBigEnough);
// passed is true

some
類似every函數(shù),但只要有一個通過給定函數(shù)的測試就返回true。
如果其他瀏覽器沒有實現(xiàn)此方法,可以用以下代碼實現(xiàn)兼容:
復制代碼 代碼如下:

Array.prototype.some = function(fn, thisObj) {
    var scope = thisObj || window;
    for ( var i=0, j=this.length; i < j; ++i ) {
        if ( fn.call(scope, this[i], i, this) ) {
            return true;
        }
    }
    return false;
};
function isBigEnough(element, index, array) {
  return (element >= 10);
}
var passed = [2, 5, 8, 1, 4].some(isBigEnough);
// passed is false
passed = [12, 5, 8, 1, 4].some(isBigEnough);
// passed is true

filter
把符合條件的元素放到一個新數(shù)組中返回。
如果其他瀏覽器沒有實現(xiàn)此方法,可以用以下代碼實現(xiàn)兼容:
復制代碼 代碼如下:

Array.prototype.filter = function(fn, thisObj) {
    var scope = thisObj || window;
    var a = [];
    for ( var i=0, j=this.length; i < j; ++i ) {
        if ( !fn.call(scope, this[i], i, this) ) {
            continue;
        }
        a.push(this[i]);
    }
    return a;
};
function isBigEnough(element, index, array) {
  return (element <= 10);
}
var filtered = [12, 5, 8, 130, 44].filter(isBigEnough);

map
讓數(shù)組中的每一個元素調用給定的函數(shù),然后把得到的結果放到新數(shù)組中返回。。
如果其他瀏覽器沒有實現(xiàn)此方法,可以用以下代碼實現(xiàn)兼容:
復制代碼 代碼如下:

Array.prototype.map = function(fn, thisObj) {
    var scope = thisObj || window;
    var a = [];
    for ( var i=0, j=this.length; i < j; ++i ) {
        a.push(fn.call(scope, this[i], i, this));
    }
    return a;
};
<div id="highlighter_240589">
var numbers = [1, 4, 9];
var roots = numbers.map(Math.sqrt);
// roots is now [1, 2, 3]
// numbers is still [1, 4, 9]

reduce
讓數(shù)組元素依次調用給定函數(shù),最后返回一個值,換言之給定函數(shù)一定要用返回值。
如果其他瀏覽器沒有實現(xiàn)此方法,可以用以下代碼實現(xiàn)兼容:
復制代碼 代碼如下:

Array.prototype.reduce = function(fun /*, initial*/)
{
  var len = this.length &gt;&gt;&gt; 0;
  if (typeof fun != &quot;function&quot;)
    throw new TypeError();
  if (len == 0 &amp;&amp; arguments.length == 1)
    throw new TypeError();
  var i = 0;
  if (arguments.length &gt;= 2){
    var rv = arguments[1];
  } else{
    do{
      if (i in this){
        rv = this[i++];
        break;
      }
      if (++i &gt;= len)
        throw new TypeError();
    }while (true);
  }

  for (; i &lt; len; i++){
    if (i in this)
      rv = fun.call(null, rv, this[i], i, this);
  }
  return rv;
};

復制代碼 代碼如下:

var total = [0, 1, 2, 3].reduce(function(a, b){ return a + b; });
// total == 6

相關文章

最新評論

眉山市| 东城区| 玉门市| 大同市| 永安市| 万宁市| 治多县| 西城区| 葵青区| 沙洋县| 崇阳县| 济阳县| 任丘市| 铁力市| 抚远县| 博乐市| 黔南| 大荔县| 搜索| 阳曲县| 榆中县| 军事| 南开区| 凉山| 大安市| 三门峡市| 酉阳| 黑山县| 寻甸| 盐津县| 金寨县| 岱山县| 缙云县| 定边县| 菏泽市| 上虞市| 精河县| 汕头市| 永修县| 石林| 石台县|