Array数组的each方法

2010-07-20 16:10:44.0

在jQuery中有个很方便的each方法来遍历数组,Firefox中的Array也有each方法,这里我们自己实现一个array的each方法

Array.prototype.each = function( callback ){ 
for( var i = 0 ,j = this.length ; i < j ; i++ ){ 
    callback.call( this, this[i], i ); 
      }    
   } 

返回两个数组中不同的元素,求数组反集

2010-06-21 15:32:08.0

有两个数组

var a=['1','2','3','4']
var b=['1','2']

如何比较才能返回两个数组中不同的元素,其实就是求两个数组的反集,得到数组c=['3','4']

基本的算法就是比较两个数组的元素,把不同的挑出来放到一个数组里,最后返回该Array



我在上一篇文章中山寨了一个JS版的in_array函数

判断js数组包是否包含某个元素

2010-06-21 15:10:21.0

要判断数组中是否包含某个元素,从原理来来说,就是遍历整个数组,然后判断是否相等,我们来造个轮子,名字就山寨PHP的数组函数in_array()

Array.prototype.in_array = function(e)
{
for(i=0;i<this.length;i++)
{
if(this[i] == e)
return true;
}
return false;
}

或者

Array.prototype.in_array = function(e)
{
for(i=0;i<this.length && this[i]!=e;i++);
return !(i==this.length);
}

javascrip实现lastIndexOf()函数

2010-06-01 22:27:21.0
V8引擎的实现

function ToInteger( n ) {
n = Number( n );
var sign = ( n < 0 ) ? -1 : 1;
if ( n != n ) {
return 0;
}
if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY ) {
return n;
}
return ( sign * Math.floor(Math.abs(n)) );
};
function lastIndexOf= (array,element, index) {
var length = array.length;
if (index == null) {
index = length - 1;
} else {
index = ToInteger(index);
// If index is negative, index from end of the array.
if (index < 0) index = length + index;
// If index is still negative, do not search the array.
if (index < 0) index = -1;
else if (index >= length)
index = length - 1;
}
// Lookup through the array.
for (var i = index; i >= 0; i--) {
var current = array[i];
if ((current !== undefined) || i in this) {
if (current === element)
return i;
}
}
return -1;
}

jquery的$.map()函数的使用

2010-05-27 21:01:59.0

jQuery.map(array,callback)

源代码如下:

map: function( elems, callback ) {
var ret = [];
// Go through the array, translating each of the items to their
// new value (or values).
for ( var i = 0, length = elems.length; i < length; i++ ) {
var value = callback( elems[ i ], i );
if ( value != null )
ret[ ret.length ] = value;
}
return ret.concat.apply( [], ret );
}