源码
//方案1,旧方案
Array.prototype.unique = function(key) {
var arr = this;
var n = [arr[0]];
for (var i = 1; i < arr.length; i++) {
if (key === undefined) {
if (n.indexOf(arr[i]) == -1) n.push(arr[i]);
} else {
inner: {
var has = false;
for (var j = 0; j < n.length; j++) {
if (arr[i][key]!==undefined && arr[i][key] === n[j][key]) {
has = true;
break inner;
}
}
}
if (!has) {
n.push(arr[i]);
}
}
}
return n;
}
//方案2,相比方案一,少了一层循环,提高效率,逻辑更加清晰
Array.prototype.uniqueTree = function(key) {
var res = [];
var json = {};
var arr = this;
for (var i = 0; i < arr.length; i++) {
if (arr[i][key]===undefined||json[arr[i][key]]===undefined) {
res.push(arr[i]);
json[arr[i][key]] = 1;
}
}
return res;
};
###使用方法:
[1,2,3,4,3,2].unique()
//[1,2,3,4]
[{a:1},{a:2},{a:1}].unique('a')
//[{a:1},{a:2}]
热门评论:
jsoncode 2018-11-19 10:33 回复:
data:{
list:[{a:1},{a:2},{a:2}],
},
mounted:function(){
this.list = this.list.unique('a')
}
----
-  [HZ_quan](https://segmentfault.com/u/hz_quan) 2019-5-5 2:00 回复:
<p>inner 这个没理解</p>
----
-  [HZ_quan](https://segmentfault.com/u/hz_quan) 2019-5-5 2:03 回复:
<p>有bug [{a:1},{a:1},{b:3},{c:4}].unique('a') 试试这个就知道了</p>
-  [jsoncode](https://segmentfault.com/u/jsoncode) 2019-5-5 3:25 回复:HZ_quan
感谢提醒,已经修复了: arr\[i\]\[key\]\!==undefined && arr\[i\]\[key\] === n\[j\]\[key\] ,这里判断条件不足