js 去重

最近有一段事件是在做TDD测试,我觉得难点就是去重问题,现提供几个方法及自己的理解。

第一种方法:

var arr = [1, 2, 2, 3, 4, 5, 6, 6];

function getArray(a) {
 var hash = {},
     len = a.length,
     result = [];

 for (var i = 0; i < len; i++){
     if (!hash[a[i]]){
         hash[a[i]] = true;
         result.push(a[i]);
     } 
 }
 return result;
}

getArray(arr); // 输出[1, 2, 3, 4, 5, 6]

 这样的做法其实就是在遍历 给出数组 的元素时在一个hash中给每一个出现过的元素做一个标志,进而做出判断改元素是否存在,然后去重的目的。这是一种值得学习的方法

第二种方法:

 var array = [];
  var length = new_array.length;
  for(var i = 0;i < length; i++){
    for(var j = i+1; j < length; j++){
      if(new_array[i] === new_array[j] ){
        j = ++i;
      }
    }
    array.push(new_array[i]);
  }
  return array;

 这个就比较的难理解了,精华在与 j = ++i;这句话,这个是你拿第一个元素和第二个元素起一一做比较但是,当遇到不同的时候就push到array,同时以不同的那个元素为标准,接着和后面的比,以此类推。这种方法不提倡,别人难以看懂。

第三种方法:自己的方法

for (var n = 0, len = result.length; n < len; n++) {
        if (k.name == result[n].name) {
          result[n].summary += k.summary;
        }
        else if(k.name !== result[n].name && n == len -1){
          result.push(k);
        }
      }

 重要是

else if(k.name !== result[n].name && n == len -1)

 这句话,它的意思是当k.name不和result中的每一个元素不相等,直到最后一个都不相等,

n == len -1

这个样写的原因就是你每次push到result的时候result的length是一直在变的,这样就避免了长度定值问题。

   综合上述三种方法就简单好理解的是第三种,但我推荐大家学习第一种,主要学的是那种思想和那种处理问题的角度。 

猜你喜欢

转载自dingliang-321.iteye.com/blog/2212371
今日推荐