扫码关注官方订阅号
问题:同标题 要求:考虑值类型
闭关修行中......
function unique(array){ var n = [];//临时数组 for(var i = 0;i < array.length; i++){ if(n.indexOf(array[i]) == -1) n.push(array[i]); } return n; }
利用对象字面量的key与value关联性,写起来比较简单,未测试性能,考虑到只遍历一次,速度应该很快。
function distinct(arr) { var obj = {}, i = 0, len = 0; if (Array.isArray(arr) && arr.length > 0) { len = arr.length; for (i = 0; i < len; i += 1) { obj[arr[i]] = arr[i]; } return Object.keys(obj); } return []; }
最快的方法是用jQuery:
var arr = ["1","2","3","4","5","4","3"]; var uniqueArr = []; $.each(arr, function(i, el){ if($.inArray(el, uniqueArr) === -1) uniqueArr.push(el); });
不用jQuery, 你可以先排序,然后遍历此Array, 比较前后两个元素的值.
var arr = [9, 9, 111, 2, 3, 4, 4, 5, 7]; var sortedArr = arr.sort(); var results = []; for (var i = 0; i < arr.length - 1; i++) { if (sortedArr[i + 1] == sortedArr[i]) { results.push(sortedArr[i]); } } alert(results);
ES6:
Array.from(new Set(arr));
var arr = [1,3,1,4,1,5,6,3,1,2]; Array.from(new Set(arr));//[1, 3, 4, 5, 6, 2]
http://docs.closure-library.googlecode.com/git/closure_goog_array_array.js.source.html#line887
看看 closure 的去重代码吧。这个不错。
@kevinIsCoder 还可以简化一下
let arr=[1,1,1,2] [...new Set(arr)]
jQuery.unique( array );
用法见jQuery.unique()
Array.prototype.unique = function() { var res = [] var json = {} for (var i = 0; i < this.length; i++) { if(!json[this[i]]){ // 利用对象属性不重复 res.push(this[i]) json[this[i]] = 1 // 传值随意 } } return res } /*你就可以像下面这样调用该函数了*/ var arr = [2,4,66,55,33,55,3,4,4,32,2] console.log(arr.unique())
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
利用对象字面量的key与value关联性,写起来比较简单,未测试性能,考虑到只遍历一次,速度应该很快。
最快的方法是用jQuery:
不用jQuery, 你可以先排序,然后遍历此Array, 比较前后两个元素的值.
ES6:
http://docs.closure-library.googlecode.com/git/closure_goog_array_array.js.source.html#line887
看看 closure 的去重代码吧。这个不错。
@kevinIsCoder 还可以简化一下
用法见jQuery.unique()