昨天提到了Array.from方法配合set可以实现排序,那么今天总结下还有哪些方法可以实现排序呐。
1:创建一个新的数组,赋予目标数组的第一个元素,然后循环判断目标数组的第二个元素到最后一个元素,如果不包含在新数组中则push进新数组
function a1(arr) { let s = Object.prototype.toString; if(s.call(arr)!== '[object Array]'){ throw new typeError('the argument need array'); } let nArr = [] arr.forEach(function(item,index) { if(nArr.indexOf(item) === -1){ nArr.push(item) } }) return nArr; }
2:利用set结构实现 需要支持es6。
function unique(arr) { return [...new Set(arr)] }
3:利用对象的属性不能重复进行判断,但是对象的属性还会自动调用toString方法,因此无法分辨string,number是否重复比如[1,'1']因此利用新数组的indexOf进行判断下。
function unique2(array){ var n = {}, r = [], len = array.length, val; for (var i = 0; i < array.length; i++) { val = array[i]; if (!n[val]) { n[val] = [val] r.push(val); } else if (r.indexOf(val) < 0) { n[val].push(val); r.push(val); } } return r; }