• Javascript中数组的基本操作


    删除数组指定的某个元素

    via首先可以给JS的数组对象定义一个函数,用于查找指定的元素在数组中的位置,即索引,代码为:

    1 Array.prototype.indexOf = function(val) {
    2 for (var i = 0; i < this.length; i++) {
    3 if (this[i] == val) return i;
    4 }
    5 return -1;
    6 };

    然后使用通过得到这个元素的索引,使用js数组自己固有的函数去删除这个元素:
    代码为:

    1 Array.prototype.remove = function(val) {
    2 var index = this.indexOf(val);
    3 if (index > -1) {
    4 this.splice(index, 1);
    5 }
    6 };

    这样就构造了这样一个函数,比如我有有一个数组:

    1 var emp = ['abs','dsf','sdf','fd']

    假如我们要删除其中的 'fd' ,就可以使用:

    1 emp.remove('fd');

    原文链接:http://caibaojian.com/js-splice-element.html

    删除的数组的某一项

    viasplice(index,len,[item])    注释:该方法会改变原始数组。原文来自:http://caibaojian.com/js-splice-element.html

    splice有3个参数,它也可以用来替换/删除/添加数组内某一个或者几个值

    index:数组开始下标        len: 替换/删除的长度       item:替换的值,删除操作的话 item为空

    如:arr = ['a','b','c','d']

    删除:

     1 //删除起始下标为1,长度为1的一个值(len设置1,如果为0,则数组不变)
     2 var arr = ['a','b','c','d'];
     3 arr.splice(1,1);
     4 console.log(arr);  
     5 //['a','c','d']; 
     6 
     7 //删除起始下标为1,长度为2的一个值(len设置2)
     8 var arr2 = ['a','b','c','d']
     9 arr2.splice(1,2);
    10 console.log(arr2); 
    11 //['a','d']

    替换:

     1 //替换起始下标为1,长度为1的一个值为‘ttt’,len设置的1
     2 var arr = ['a','b','c','d'];
     3 arr.splice(1,1,'ttt');
     4 console.log(arr);        
     5 //['a','ttt','c','d'] 
     6 
     7 var arr2 = ['a','b','c','d'];
     8 arr2.splice(1,2,'ttt');
     9 console.log(arr2);       
    10 //['a','ttt','d'] 替换起始下标为1,长度为2的两个值为‘ttt’,len设置的1

    添加 ----  len设置为0,item为添加的值:

    1 var arr = ['a','b','c','d'];
    2 arr.splice(1,0,'ttt');
    3 console.log(arr);        
    4 //['a','ttt','b','c','d'] 表示在下标为1处添加一项'ttt'

    via2:delete    

    delete删除掉数组中的元素后,会把该下标出的值置为undefined,数组的长度不会变

    1 var arr = ['a','b','c','d'];
    2 delete arr[1];
    3 arr;  
    4 //["a", undefined × 1, "c", "d"] 中间出现两个逗号,数组长度不变,有一项为undefined

    javascript数组去重

    原文链接:http://caibaojian.com/js-delrepeat.html

    via数组去重复是一个常见的需求,我们暂时考虑同类型的数组去重复。主要是理清思路和考虑下性能。以下方法,网上基本都有,这里只是简单地总结一下。原文来自:http://caibaojian.com/js-delrepeat.html

    思路:

    1. 遍历数组,一一比较,比较到相同的就删除后面的
    2. 遍历数组,一一比较,比较到相同的,跳过前面重复的,不相同的放入新数组
    3. 任取一个数组元素放入新数组,遍历剩下的数组元素任取一个,与新数组的元素一一比较,如果有不同的,放入新数组。
    4. 遍历数组,取一个元素,作为对象的属性,判断属性是否存在

    这里提供五个代码示范:
    1. 删除后面重复的:

    1 function ov1(arr){
    2     //var a1=((new Date).getTime())
    3     for(var i=0;i<arr.length;i++)
    4         for(var j=i+1;j<arr.length;j++)
    5             if(arr[i]===arr[j]){arr.splice(j,1);j--;}            
    6     //console.info((new Date).getTime()-a1)                
    7     return arr.sort(function(a,b){return a-b});
    8 }

    2. 这个是常规的方法,比较好理解,如果相同则跳出循环:

     1 function ov2(a) {
     2     //var a1=((new Date).getTime())
     3     var b = [], n = a.length, i, j;
     4     for (i = 0; i < n; i++) {
     5         for (j = i + 1; j < n; j++)
     6             if (a[i] === a[j]){j=false;break;}
     7         if(j)b.push(a[i]);
     8         }
     9     //console.info((new Date).getTime()-a1)    
    10     return b.sort(function(a,b){return a-b});
    11 }

    3. 这个我花了好长时间明白的,这里j循环虽然继续了,但是i值已经改变了。就等于是一个新的i循环:

     1 function ov3(a) {
     2     //var a1=((new Date).getTime())
     3     var b = [], n = a.length, i, j;
     4     for (i = 0; i < n; i++) {
     5         for (j = i + 1; j < n; j++)
     6         if (a[i] === a[j])j=++i
     7     b.push(a[i]);}
     8     //console.info((new Date).getTime()-a1)    
     9     return b.sort(function(a,b){return a-b});
    10 }

    4. 保证新数组中的都是唯一的:

     1 function ov4(ar){
     2 //var a1=((new Date).getTime())
     3     var m=[],f;
     4     for(var i=0;i<ar.length;i++){
     5     f=true; 
     6     for(var j=0;j<m.length;j++)
     7     if(ar[i]===m[j]){f=false;break;};
     8     if(f)m.push(ar[i])}
     9 //console.info((new Date).getTime()-a1)    
    10     return m.sort(function(a,b){return a-b});
    11 }

    5. 用对象属性:

    1 function ov5(ar){
    2     //    var a1=(new Date).getTime()
    3             var m,n=[],o= {};
    4             for (var i=0;(m= ar[i])!==undefined;i++)
    5             if (!o[m]){n.push(m);o[m]=true;}
    6     //    console.info((new Date).getTime()-a1)    
    7         return n.sort(function(a,b){return a-b});;
    8         }
  • 相关阅读:
    随笔2
    随笔
    关于updateElement接口
    随笔1
    本地访问正常,服务器访问乱码 记录
    Redis (error) NOAUTH Authentication required.解决方法
    tomcat启动很慢 停留在 At least one JAR was scanned for TLDs yet contained no TLDs.
    微信公众号消息回复
    微信公众号 报token验证失败
    idea中web.xml报错 Servlet should have a mapping
  • 原文地址:https://www.cnblogs.com/joyco773/p/6242069.html
Copyright © 2020-2023  润新知