源码
//方案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}]
推荐阅读
- 操作系统|[译]从内部了解现代浏览器(1)
- web网页模板|如此优秀的JS轮播图,写完老师都沉默了
- JavaScript|vue 基于axios封装request接口请求——request.js文件
- vue.js|vue中使用axios封装成request使用
- JavaScript|JavaScript: BOM对象 和 DOM 对象的增删改查
- JavaScript|JavaScript — 初识数组、数组字面量和方法、forEach、数组的遍历
- JavaScript|JavaScript — call()和apply()、Date对象、Math、包装类、字符串的方法
- JavaScript|JavaScript之DOM增删改查(重点)
- javascript|vue使用js-xlsx导出excel,可修改格子样式,例如背景颜色、字体大小、列宽等
- javascript|javascript中的数据类型转换