method 1
使用两重循环
function unique(arr) { var res = []; for(var i = 0, len = arr.length;i < len; i++) { var item = arr[i]; for(var j = 0, jlen = res.length; j
function unique(arr) { var ret = [] for (var i = 0; i < arr.length; i++) { var item = arr[i] if (ret.indexof(item) === -1) { ret.push(item) } } return ret }
这里判断可以使用一个语法糖
function unique(arr) { var res = []; for(var i = 0, len = arr.length;i < len; i++) { var item = arr[i]; (res.indexof(item) === -1) && res.push(item); } return res; }
但是在低版本浏览器并没有 indexof
var indexof = [].indexof ? function(arr, item) { return arr.indexof(item) } : function indexof(arr, item) { for (var i = 0; i < arr.length; i++) { if (arr[i] === item) { return i } } return -1 } function unique(arr) { var ret = [] for (var i = 0; i < arr.length; i++) { var item = arr[i] if (indexof(ret, item) === -1) { ret.push(item) } } return ret }
method3
使用两重循环的另外一种比较方式,前面是将原数组的元素和结果数组一一比较,下面我们可以将原数组的重复元素的最后一个元素放入数组中
function unique(arr) { var ret = []; var len = arr.length; var isrepeat; for(var i=0; i
function unique(a) { var res = []; for (var i = 0, len = a.length; i < len; i++) { for (var j = i + 1; j < len; j++) { // 这一步十分巧妙 // 如果发现相同元素 // 则 i 自增进入下一个循环比较 if (a[i] === a[j]) j = ++i; //j = i = i + 1; } res.push(a[i]); } return res; }
method4
用 javascript 中的 object 对象来当作 哈希表
function dedup(arr) { var hashtable = {}; return arr.filter(function(value,index,arr){ var key = json.stringify(value); var match = boolean(hashtable[key]); return (match ? false : hashtable[key] = true); }); }
因为 object 的 key 值都是 string 类型,所以对于 1 和 1 无法分别,我们可以稍微改进下,将类型也存入 key 中
function dedup(arr) { var ret = []; var hash = {}; for(var i = 0; i < arr.length; i++) { var item = arr[i]; var key = typeof(item) + item; if(hash[key] !== 1) { ret.push(item) hash[key] = 1; } } return ret; }
相关推荐:
php实现数组去重的方法代码
js简单实现数组去重的方法分析
jquery简单实现对数组去重及排序操作详解
以上就是javascript数组去重的几种方法分享的详细内容。