去重:
创建一个空数组和一个空对象,在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; };