js数组的扩展方法

来源:互联网 发布:马化腾第一个软件 编辑:程序博客网 时间:2024/05/18 09:54

1、用于清空数组

 

Js代码  收藏代码
  1. Array.prototype.clear = function() {  
  2.     this.length = 0;  
  3. }  
 

2、判断数据项在数组中的位置

varoldArrayIndexOf = Array.indexOf;//判断是否原始浏览器是否存在indexOf方法Array.prototype.indexOf = function(obj) {    if(!oldArrayIndexOf) {        for(vari = 0, imax = this.length; i < imax; i++) {            if(this[i] === obj) {                returni;            }        }        return-1;    } else{        returnoldArrayIndexOf(obj);    }}

3、判断数据项是否在该数组中

Array.prototype.contain = function(obj) {    returnthis.indexOf(obj) !== -1;}

4、把数据项添加到指定的位置

Array.prototype.insertAt = function(index, obj) {    if(index < 0) index = 0;     if(index > this.length) index = this.length;    this.length++;    for(vari = this.length - 1; i > index; i--) {        this[i] = this[i - 1];    }    this[index] = obj;}

5、返回最有一项数据

Array.prototype.last = function() {    returnthis[this.length - 1];}

6、移除数组指定索引的值

Array.prototype.removeAt = function(index) {    if(index < 0 || index >= this.length) return;    varitem = this[index];    for(vari = index, imax = this.length - 2; i < imax; i++) {         this[i] = this[i + 1];     }     this.length--;     returnitem; }

7、移除数据项的数据

Array.prototype.removeAt = function(obj) {     varindex = this.indexOf(obj);     if(index >= 0)        this.removeAt(index);}

8、用于数组的查询
用于查询对象数组中对象的某些值,同时支持对已查询属性进行重命名,若查询的属性不在改数组中,则该属性返回为undefined

Js代码  收藏代码
  1. Array.prototype.select = function(args) {  
  2.     varnewItems = [];  
  3.     if(typeof(args) === "object"&& arguments.length === 1) {//传入查询的参数为对象时的处理方式  
  4.         for(vari = 0, imax = this.length; i < imax; i++) {  
  5.             varitem = {};  
  6.             for(varkey inargs) {  
  7.                 if(args[key] !== undefined) {  
  8.                     item[key] = this[i][key] === undefined ? "undefined"this[i][key];  
  9.                 }  
  10.             }  
  11.             newItems.push(item);  
  12.         }  
  13.     } elseif(typeof(args) === "string"&& arguments.length === 1) {//传入参数为字符串,且只有一个参数的处理方式  
  14.         for(vari = 0, imax = this.length; i < imax; i++) {  
  15.             varitem = {};  
  16.             varkeys = args.split(',');  
  17.             for(vark = 0, kmax = keys.length; k < kmax; k++) {  
  18.                 variKey = keys[k].split("as");  
  19.                 if(iKey.length === 1) {  
  20.                     item[iKey[0].trim()] = this[i][iKey[0].trim()] === undefined ? "undefined"this[i][iKey[0].trim()];  
  21.                 } else{  
  22.                     item[iKey[1].trim()] = this[i][iKey[0].trim()] === undefined ? "undefined"this[i][iKey[0].trim()];  
  23.                 }  
  24.             }  
  25.             newItems.push(item);  
  26.         }  
  27.     } else{//传入的参数是多个字符串的处理方式  
  28.         for(vari = 0, imax = this.length; i < imax; i++) {  
  29.             varitem = {};  
  30.             for(varj = 0, jmax = arguments.length; j < jmax; j++) {  
  31.                 if(arguments[j] !== undefined) {  
  32.                     variKey = arguments[j].split("as");  
  33.                     if(iKey.length === 1) {  
  34.                         item[iKey[0].trim()] = this[i][iKey[0].trim()] === undefined ? "undefined"this[i][iKey[0].trim()];  
  35.                     } else{  
  36.                         item[iKey[1].trim()] = this[i][iKey[0].trim()] === undefined ? "undefined"this[i][iKey[0].trim()];  
  37.                     }  
  38.                 }  
  39.             }  
  40.             newItems.push(item);  
  41.         }  
  42.     }  
  43.     returnnewItems;  
  44. }  

 

假设数据对象数组为:var obj = [{ name: "张三", second.age: "24", sex: "男" }
, { name: "张二", age: "21", sex: "女" }
, { name: "张一", age: "23", sex: "男" }
, { name: "张四", age: "25", sex: "女" }
, { name: "张五", age: "22", sex: "男"}];

例一:obj.select(“name,second.age as age,sex”);
例二:obj.select(“name”,”second.age as age”,”sex”);
例三:查询属性对象var arg={name:”",second.age:”",sex:”"};
obj.select(arg);

9,js数组some方法的运用

数组some方法接受2个参数;一个是可以接受3个参数的回调函数,一个是代表执行上下文的对象,some方法返回boolean型;

回调函数是用来判断传入的数组中是否有满足条件的方法编写;

例如:查找数组中是否存在某元素:

 

Js代码  收藏代码
  1. var arr =[2,3,5,6,7,9];  
  2. var id  = 5;  
  3. //回调函数,用于做逻辑判断  
  4. function back(arr){  
  5.      return arr === id;  
  6. }  
  7. if(arr.some(back)){  
  8.      alert('true')  
  9. }else{  
  10.      alert('false')  
  11. }  
 some可用来处理复杂的搜索,比如同时判断多个条件:
Js代码  收藏代码
  1. var found = null;  
  2. var points = [ {x: 10, y: 20}, {x: 15, y: 53}, {x: 17, y: 72}];  
  3. points.some(function (point) {  
  4.  if (point.x > 10 && point.y < 60) {   
  5.  found = point; // found return true;  
  6.  }   
  7.  return false;  
  8. });  
  9. if (found) {  
  10.  alert("Found: " + found.x + ", " + found.y); // Found: 15, 53  
  11. }  

 

我们也可以用forEach来查询,但forEach到达指定的条件后并不能中止代码执行,需要额外抛出异常才能跳出forEach的循环。

 

 

 返回的是满足条件的数组;

扩展链接:http://www.css88.com/jqapi-1.9/jQuery.grep/

-------也可以使用array 的 some方法:

不同的是some方法只要数组中有一个满足条件的,就会返回true,some方法中传入的参数是一个回调函数;

var array = [1,2,3,4,5,9]

function back(arr){

         arr >0//arr代表数组中的元素

}

array.some(back(array));//true

0 0
原创粉丝点击