论坛首页 Web前端技术论坛

js 去除数据重复数据

浏览 10098 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-11-29  
如题:
-------------
       Array.prototype.distinct = function() {
		        var ret = [];
		        for (var i = 0; i < this.length; i++) {
		         for (var j = i+1; j < this.length;) {
		             if (this[i].id === this[j].id) {
		                 ret.push(this.splice(j, 1)[0]);
		             } else {
		                 j++;
		             }
		         }
		        }
		        return ret;
	}

说明:此实例数组类型为
var values =new Object();
values.id= getValues[i].id;
values.text= getValues[i].text;
values.checked="1";

所以:判断条件为  if (this[i].id === this[j].id)
如果数据类型为
var s = [1,2,3····n];
则,修改为
if (this[i] === this[j])
即可!
   发表时间:2011-11-29   最后修改:2011-11-29
性能太慢,应考虑采用类似java的Set结构来处理这个需求:

Array.prototype.distinct = function(field) {
  var set = {},
    hasField = typeof(field)!='undefined';
  for(var i=this.length-1; i>=0; i--){
    var obj = this[i],
      cacheKey = hasField ? obj[field] : obj;
    if(cacheKey in set){
      this.splice(i, 1);
      continue;
    }else{
      set[cacheKey] = null;
    }
  }
}

//test
var a = [{id:1, name:'aaa'}, {id:2, name:'bbb'}, {id:1, name:'ccc'}];
a.distinct('id');

var b = [1,2,3,'a','b',2,'b',3];
b.distinct();

console.debug(a);
console.debug(b);
0 请登录后投票
   发表时间:2011-11-30  
谈性能,你又弄错了吧,js是在客户端算的,就这点计算量 肯定比服务器端好!算法有待优化
0 请登录后投票
   发表时间:2011-11-30  
var b = [2,'2']; 
b.distinct(); 

都没有对类型做检查,不同的类型也被去除了!
0 请登录后投票
   发表时间:2011-12-03  
foot3188 写道
var b = [2,'2']; 
b.distinct(); 

都没有对类型做检查,不同的类型也被去除了!

这位只看代码,不看说明的.
代码里用了 === 已经排除了不同类型的了.
只是说明比较的是元素的id属性,对于数字和字符串,就要把 id属性去掉了.

否则 undefined===undefined 当然是成立的.
0 请登录后投票
   发表时间:2011-12-04   最后修改:2011-12-04
早就知道发帖会被各种或强或不强的人拍砖的,所以我一直都只是围观。哈哈
0 请登录后投票
   发表时间:2011-12-04  
复杂度为数字的长度,咋样?
0 请登录后投票
   发表时间:2011-12-04  
foot3188 写道
var b = [2,'2']; 
b.distinct(); 

都没有对类型做检查,不同的类型也被去除了!


为什么要在这里做类型检查?不同类型的数据出现在同一个列表中本身就是不正确的逻辑。
0 请登录后投票
   发表时间:2011-12-04  
jyjava 写道
复杂度为数字的长度,咋样?


那完蛋了,这么多数据放在浏览器本地做,何必呢,为什么不放在服务端计算好?
0 请登录后投票
   发表时间:2011-12-04   最后修改:2011-12-04
flyer646 写道
谈性能,你又弄错了吧,js是在客户端算的,就这点计算量 肯定比服务器端好!算法有待优化


小网站当然不用在意这点优化,如果你真的写过高交互的web app,你就不会这么认为了。
而且在写代码的时候时刻记得写出高性能的代码是每一个好的程序员应该做的。
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics