美文网首页
js-数组删除指定元素的效率比较

js-数组删除指定元素的效率比较

作者: 前端喵 | 来源:发表于2018-06-13 15:37 被阅读0次

    本文分析几种从数组中删除指定元素(该元素出现可能不止一次)的方法的效率,这几种方法都不会改变原数组。话不多说直接上代码。

    var array = [];
    let count = 100;
    for(let i=0; i<count;i++){
      if(i%7===0){
        array.push('test'+7);
      }else {
        array.push('test'+i);
      }
    }
    var special = 'test7';
    
    console.log('count:',count);
    
    /*for i-- splice实现*/
    console.log('for i ++');
    var deleteArray = function (sourse, target) {
      for(let i = sourse.length-1 ;i>=0 ; i--){
        if (sourse[i]===target){
          sourse.splice(i,1);
          i++;
        }
      }
      // console.log(sourse);
      return sourse;
    }
    console.time('time1');
    deleteArray(array,special);
    console.timeEnd('time1');
    
    
    /*数组转字符串实现*/
    console.log('string');
    var deleteArrayString = function (source, target) {
      var myString = source.join(',') + ',';
      let reg = `/${target},/g`;
      let newstr = myString.replace(eval(reg),'');
      var resultArray = newstr.split(',').slice(0,-1);
      // console.log(resultArray);
      return resultArray;
    }
    console.time('time2');
    deleteArrayString(array,special);
    console.timeEnd('time2');
    
    /*filter 实现*/
    console.log('filter');
    console.time('time3');
    /*console.log(array.filter(function (value) {
      return value !== special;
    }));*/
    array.filter(function (value) {
      return value !== special;
    });
    console.timeEnd('time3');
    
    
    
    /*for 新数组实现*/
    console.log('for new array');
    var deleteArrayNew = function (sourse, target) {
      var newArray = [];
      for(let i in sourse){
        if (sourse[i]!==target){
          newArray.push(sourse[i]);
        }
      }
      // console.log(newArray);
      return newArray;
    }
    console.time('time4');
    deleteArray(array,special);
    console.timeEnd('time4');
    
    
    改变数据量count,来观察这几种方法的执行效率。如下图 执行效率.png

    数据量较小时零点几毫秒的差距并不明显,当数据量增加时,代码运行的时间差也越来越大,其中用到splice的方法里面在数据量大增时效率明显低很多,我想原因大概是splice每执行一次都要移动很多次数组的元素,导致效率低下。

    相关文章

      网友评论

          本文标题:js-数组删除指定元素的效率比较

          本文链接:https://www.haomeiwen.com/subject/jdbjeftx.html