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

2018-06-13  本文已影响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每执行一次都要移动很多次数组的元素,导致效率低下。

上一篇下一篇

猜你喜欢

热点阅读