`
yanzhihong23
  • 浏览: 57694 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JS数组的去重与降维

 
阅读更多

 

去重:

创建一个空数组和一个空对象,在for循环中,每次取出一个元素,检测是否已经是对象的key,如果不存在就加入到新建的数组中。

 

降维:

由于不能给this赋值,所以先将数组赋值给that。在for循环中,每次取出一个元素,检测是否是数组。如果是,把数组拆分成3个部分:当前元素之前所有元素组成的数组、当前元素(也是数组)、当前元素之后的所有元素组成的数组。用concat将这三个数组重新合并为一个新数组,由于for循环会index+1,把当前的index-1,保持index不变,重新做一次检测。因为当前元素这个数组里面的第一个元素也可能还是一个数组。

 

// 去重
Array.prototype.unique = function(){
	var res = [], json = {}, i = 0, len = this.length;
	for(; i < len; i++) {
		if(!json[this[i]]) {
			res.push(this[i]);
			json[this[i]] = 1;
		}
	}

	return res;
};

// 降维,支持N维数组
Array.prototype.dr = function(){
	var that = this; // 不能给this赋值
	for (var i = 0; i < that.length; i++) {
		if(that[i] instanceof Array){
			that = that.slice(0, i).concat(that[i], that.slice(i+1));
			i--;
		}
	}

	return that;
};

 

 

 

 

 

2
3
分享到:
评论
2 楼 yanzhihong23 2014-04-10  
樱井智树 写道
楼主可以详细解释下原理么?乍一看经验不足真心不怎么看得出来


更新了,你再看看?
1 楼 樱井智树 2014-04-10  
楼主可以详细解释下原理么?乍一看经验不足真心不怎么看得出来

相关推荐

Global site tag (gtag.js) - Google Analytics