`
hudeyong926
  • 浏览: 2033293 次
  • 来自: 武汉
社区版块
存档分类
最新评论

js Array扩展函数

 
阅读更多

使用

<script language=javascript>
var isNumeric = function(x) {
   // returns true if x is numeric and false if it is not.
   var RegExp = /^(-)?(\d*)(\.?)(\d*)$/; 
   return String(x).match(RegExp);
}
var myArray = [1,'two',3,'four',5,'six',7,'eight',9,'ten'];
var oddArray=myArray.filter(isNumeric);  // outputs: 1,3,5,7,9
var oddArray=myArray.some(isNumeric);  // outputs: true
var oddArray=myArray.every(isNumeric);  // outputs: false
var printArray =function(x, idx){
   document.writeln('['+idx+'] = '+x);
}
myArray.forEach(printArray);// outputs: [0] = 1 [1] = two [2] = 3 [3] = four [4] = 5
myArray.remove(9);
document.writeln(myArray); 

 

if (!Array.prototype.every) 
{
  Array.prototype.every = function(fun /*, thisp*/)
  {
    var len = this.length;
    if (typeof fun != "function")
      throw new TypeError();

    var thisp = arguments[1];
    for (var i = 0; i < len; i++)
    {
      if (i in this &&
          !fun.call(thisp, this[i], i, this))
        return false;
    }

    return true;
  };
}
if (!Array.prototype.filter)
{
  Array.prototype.filter = function(fun /*, thisp*/)
  {
    var len = this.length;
    if (typeof fun != "function")
      throw new TypeError();

    var res = new Array();
    var thisp = arguments[1];
    for (var i = 0; i < len; i++)
    {
      if (i in this)
      {
        var val = this[i]; // in case fun mutates this
        if (fun.call(thisp, val, i, this))
          res.push(val);
      }
    }

    return res;
  };
}
if (!Array.prototype.forEach)
{
  Array.prototype.forEach = function(fun /*, thisp*/)
  {
    var len = this.length;
    if (typeof fun != "function")
      throw new TypeError();

    var thisp = arguments[1];
    for (var i = 0; i < len; i++)
    {
      if (i in this)
        fun.call(thisp, this[i], i, this);
    }
  };
}
if (!Array.prototype.map)
{
  Array.prototype.map = function(fun /*, thisp*/)
  {
    var len = this.length;
    if (typeof fun != "function")
      throw new TypeError();

    var res = new Array(len);
    var thisp = arguments[1];
    for (var i = 0; i < len; i++)
    {
      if (i in this)
        res[i] = fun.call(thisp, this[i], i, this);
    }

    return res;
  };
}
if (!Array.prototype.some)
{
  Array.prototype.some = function(fun /*, thisp*/)
  {
    var len = this.length;
    if (typeof fun != "function")
      throw new TypeError();

    var thisp = arguments[1];
    for (var i = 0; i < len; i++)
    {
      if (i in this &&
          fun.call(thisp, this[i], i, this))
        return true;
    }

    return false;
  };
}
Array.prototype.sortNum = function() {
   return this.sort( function (a,b) { return a-b; } );
}
<!--
var tmp = [5,9,12,18,56,1,10,42,'blue',30, 7,97,53,33,30,35,27,30,'35','Ball', 'bubble'];
var thirty=tmp.find(30);             // Returns 9, 14, 17
var thirtyfive=tmp.find('35');       // Returns 18
var thirtyfive=tmp.find(35);         // Returns 15
var haveBlue=tmp.find('blue');       // Returns 8
var notFound=tmp.find('not there!'); // Returns false
var regexp1=tmp.find(/^b/);          // returns 8,20    (first letter starts with b)
var regexp1=tmp.find(/^b/i);         // returns 8,19,20 (same as above but ignore case)
-->
Array.prototype.find = function(searchStr) {
  var returnArray = false;
  for (i=0; i<this.length; i++) {
    if (typeof(searchStr) == 'function') {
      if (searchStr.test(this[i])) {
        if (!returnArray) { returnArray = [] }
        returnArray.push(i);
      }
    } else {
      if (this[i]===searchStr) {
        if (!returnArray) { returnArray = [] }
        returnArray.push(i);
      }
    }
  }
  return returnArray;
}
//随机改变数组的排序
Array.prototype.shuffle = function (){   
    for(var rnd, tmp, i=this.length; i; rnd=parseInt(Math.random()*i), tmp=this[--i], this[i]=this[rnd], this[rnd]=tmp);  
	return this;
}   
<!--var myArray = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15];
var yourArray = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15];
document.writeln(myArray.compare(yourArray)); // outputs: true;-->
Array.prototype.compare = function(testArr) {
    if (this.length != testArr.length) return false;
    for (var i = 0; i < testArr.length; i++) {
        if (this[i].compare) { 
            if (!this[i].compare(testArr[i])) return false;
        }
        if (this[i] !== testArr[i]) return false;
    }
    return true;
}
//去掉数组中重复的值var a = new Array("5","7","7"); a.unique();
Array.prototype.unique = function() {
	var data = this || [];
    var a = {}; //声明一个对象,javascript的对象可以当哈希表用
    for (var i = 0; i < data.length; i++) {
        a[data[i]] = true;  //设置标记,把数组的值当下标,这样就可以去掉重复的值
    }
    data.length = 0; 
    
    for (var i in a) { //遍历对象,把已标记的还原成数组
        this[data.length] = i; 
    } 
    return data;
}

Array.prototype.addAll = function($array)
{
	if($array == null || $array.length == 0)
		return;

	for(var $i=0; $i<$array.length; $i++)
		this.push($array[$i]);
}

Array.prototype.contains = function($value)
{
	for(var $i=0; $i<this.length; $i++)
	{
		var $element = this[$i];
		if($element == $value)
			return true;
	}

	return false;
}

Array.prototype.indexOf = function($value)
{
	for(var $i=0; $i<this.length; $i++)
	{
		if(this[$i] == $value)
			return $i;
	}

	return -1;
}
if (!Array.prototype.lastIndexOf)
{
  Array.prototype.lastIndexOf = function(elt /*, from*/)
  {
    var len = this.length;

    var from = Number(arguments[1]);
    if (isNaN(from))
    {
      from = len - 1;
    }
    else
    {
      from = (from < 0)
           ? Math.ceil(from)
           : Math.floor(from);
      if (from < 0)
        from += len;
      else if (from >= len)
        from = len - 1;
    }

    for (; from > -1; from--)
    {
      if (from in this &&
          this[from] === elt)
        return from;
    }
    return -1;
  };
}
Array.prototype.insertAt = function($value, $index)
{
	if($index < 0)
		this.unshift($value);
	else if($index >= this.length)
		this.push($value);
	else
		this.splice($index, 0, $value);
}
/** 
* 根据数组的下标来删除元素 
*/  
Array.prototype.removeByIndex=function($n) {   
    if($n<0){ //如果n<0,则不进行任何操作。  
      return this;  
    }else{  
        return this.slice(0,$n).concat(this.slice($n+1,this.length));  
    }  
}
//依赖indexOf
Array.prototype.remove = function($value)
{
	var $index = this.indexOf($value);

	if($index != -1)
		this.splice($index, 1);
}

Array.prototype.removeAll = function()
{
	while(this.length > 0)
		this.pop();
}

Array.prototype.replace = function($oldValue, $newValue)
{
	for(var $i=0; $i<this.length; $i++)
	{
		if(this[$i] == $oldValue)
		{
			this[$i] = $newValue;
			return;
		}
	}
}

Array.prototype.swap = function($a, $b)
{
	if($a == $b)
		return;

	var $tmp = this[$a];
	this[$a] = this[$b];
	this[$b] = $tmp;
}
Array.prototype.max = function() {  
	return Math.max.apply({}, this);  
}  
Array.prototype.min = function() {  
	return Math.min.apply({}, this);  
} 
Array.prototype.splice = function(start, delLen, item){
	var len =this.length;
	start = start<0?0:start>len?len:start?start:0;
	delLen=delLen<0?0:delLen>len?len:delLen?delLen:len;	
	
	var arr =[],res=[];
	var iarr=0,ires=0,i=0;
	
	for(i=0;i<len;i++){
		if(i<start|| ires>=delLen)	arr[iarr++]=this[i];
		else {
			res[ires++]=this[i];
			if(item&&ires==delLen){
				arr[iarr++]=item;
			}
		}	
	}
	if(item&&ires<delLen) arr[iarr]=item; 
	
	for(var i=0;i<arr.length;i++){
		this[i]=arr[i];
	}
	this.length=arr.length;
	return res;
}
Array.prototype.shift = function(){ if(!this) return[];return this.splice(0,1)[0];}

//分开添加,关键字shallow copy,如果遇到数组,复制数组中的元素
Array.prototype.concat = function(){
	var i=0;
	while(i<arguments.length){
		if(typeof arguments[i] === 'object'&&typeof arguments[i].splice ==='function' &&!arguments[i].propertyIsEnumerable('length')){
		// NOT SHALLOW COPY BELOW
		//	Array.prototype.concat.apply(this,arguments[i++]);
			var j=0;
			while(j<arguments[i].length)	this.splice(this.length,0,arguments[i][j++]);
			i++;
		} else{
			this[this.length]=arguments[i++];
		}
	}
	return this;
}

Array.prototype.join = function(separator){
	var i=0,str="";
	while(i<this.length) str+=this[i++]+separator;
	return str;
}

Array.prototype.pop = function() { return this.splice(this.length-1,1)[0];}

Array.prototype.push = function(){ 
	Array.prototype.splice.apply(this,
		[this.length,0].concat(Array.prototype.slice.apply(arguments))); //这里没有直接处理参数,而是复制了一下
	return this.length;
}
Array.prototype.reverse = function(){
	for(var i=0;i<this.length/2;i++){
		var temp = this[i];
		this[i]= this[this.length-1-i];
		this[this.length-1-i] = temp;
	}
	return this;
}
Array.prototype.slice = function(start, end){
	var len =this.length;
	start=start<0?start+=len:start?start:0;
	end =end<0?end+=len:end>len?len:end?end:len;
			
	var i=start;
	var res = [];
	while(i<end){
		res.push(this[i++]);
	}
	return res;	
}
//arr.unshift(ele1,ele2,ele3....)
Array.prototype.unshift =function(){
	Array.prototype.splice.apply(this,[0,0].concat(Array.prototype.slice.apply(this,arguments)));
}
分享到:
评论

相关推荐

    javascript string和array常用扩展方法

    javascript string和array常用扩展方法

    js Array对象的扩展函数代码

    随着开发的深入,开发者常常会发现JavaScript内置的数组方法不能完全满足特定需求,因此会使用扩展函数来增加数组对象的功能。本文将介绍如何扩展Array对象的一些常用函数,包括`filter`、`every`、`forEach`、`map`...

    de1.7 轻量级的javascript扩展函数库

    de.js是一个轻量级的javascript扩展函数库,通过扩展页面元素的方法和属性、和扩展javascript内置类型的方法来帮助web前端开发人员实现更便捷和高效的编程。以下是主要特点: 支持类似jquery的选择器,同时支持类似...

    javascript Array数组对象的扩展函数代码

    标题提到的“javascript Array数组对象的扩展函数代码”就是关于如何给Array对象添加额外的方法,以实现更便捷的操作。描述中提到了“去除字符串空格”和“数组排序”,这些都是常见的数组操作。 首先,我们来讨论...

    JavaScript实现的in_array函数

    在JavaScript中,没有内置函数可以直接用来判断一个值是否存在于数组中,这与PHP中的`in_array()`函数不同。为了实现类似的功能,我们可以自定义一个`in_array`函数。以下是对这个自定义`in_array`函数的详细解释: ...

    Mtils是一套前端代码集合提供常用的数据校验数据加密扩展函数便捷函数

    Mtils 的扩展函数部分是对 JavaScript 原生对象功能的补充和增强,比如对 Array、String、Date 等对象的扩展。这些扩展函数通常是为了提升代码的可读性和可维护性,减少重复代码,例如数组的去重、字符串的操作等。...

    js函数扩展

    【标题】"js函数扩展"涉及的是JavaScript编程语言中对函数功能的增强和优化,它主要涵盖函数式编程的一些概念和技巧,以及JavaScript自身提供的函数特性。JavaScript是一种动态类型的脚本语言,它在Web开发中扮演着...

    JavaScript Array扩展实现代码

    在JavaScript中,Array对象是处理数组数据的关键部分,而Array扩展则是为了让开发者能够更加方便地操作数组,提供了许多实用的方法。在本文中,我们将探讨几个常见的JavaScript Array扩展,包括`indexOf`、`...

    jquery函数包,另附属三个常用扩展函数

    《jQuery函数包与扩展函数详解》 jQuery,作为一款广泛使用的JavaScript库,极大地简化了DOM操作、事件处理、动画设计和Ajax交互等任务。本文将深入探讨jQuery的核心功能,并特别关注其中的三个常用扩展函数,旨在...

    JavaScript实现Array(数组)和Map

    `array.js` 文件可能包含了对数组操作的一些自定义函数或者扩展,例如可能实现了数组去重、查找指定元素的索引、排序等功能。这些功能可以通过阅读源码来了解其具体的实现方式和用途。 接着,Map是ES6中新增的一种...

    JavaScript常用字符串与数组扩展函数小结_.docx

    ### JavaScript常用字符串与数组扩展函数小结 #### 引言 在现代Web开发中,JavaScript是一种必不可少的语言。作为一门功能强大的脚本语言,它提供了大量的内置对象和方法来处理各种数据类型,其中最常用的就是字符...

    Mtils2是一套前端代码集合,提供常用的数据校验、数据加密、扩展函数、便捷函数。.zip

    Mtils2 提供的扩展函数是对JavaScript原生对象或函数的增强,它们可能包括: 1. **Array的扩展**:例如,添加对数组的查找、排序、去重等操作的支持。 2. **String的扩展**:增加对字符串的操作,如格式化、截取、...

    Mtils是一套前端辅助代码集合,提供常用的数据校验、数据加密、扩展函数、便捷函数。.zip

    它包含了一系列实用的工具函数,涵盖了数据校验、数据加密、扩展函数以及便捷函数等多个方面。通过使用 Mtils,开发者可以更高效地编写代码,提高开发效率,同时保证代码的质量和安全性。 **1. 数据校验:** 在前端...

    JavaScript ES6函数式编程入门经典_javascript_tall7cj_

    `Array.from()`可以将类似数组的对象转换为真正的数组,而扩展运算符则可以在数组拼接、函数调用等多种场景下便捷地展开数组。 在函数式编程中,高阶函数(Higher-Order Functions)起着核心作用,它们接受函数作为...

    基于prototype扩展的JavaScript常用函数库

    在实际的Web开发中,这些扩展的函数库能够极大地提升开发效率,使代码更加简洁和易于维护。不过需要注意的是,使用原型扩展要谨慎,因为如果多个脚本库都对同一个对象的原型进行了扩展,可能会导致冲突。因此在使用...

    JS 操作Array数组的方法及属性实例解析

    对于Array对象,我们可以通过修改`Array.prototype`来扩展数组的功能。例如,可以定义一个新的方法如`array_max()`,然后将其添加到`Array.prototype`上,这样所有的数组实例都能调用这个方法。在示例中,`array_max...

    类似php的js数组的in_array函数自定义方法

    在JavaScript中,`in_array`函数是一个在PHP中广泛使用的数组操作函数,它用于检查数组中是否存在指定的元素。然而,JavaScript的原生数组对象并没有提供这样的功能。因此,为了实现类似PHP的`in_array`功能,我们...

Global site tag (gtag.js) - Google Analytics