摘要:源码方案,旧方案方案,相比方案一,少了一层循环,提高效率,逻辑更加清晰使用方法
源码
</>复制代码
//方案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}]
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/80548.html
摘要:编写双重循环去重当出现相同的元素时,删除重复的元素哈希表形式查询对象是否存在当前元素属性借助方法查询空数组里面是否已经存在这个值,不存在则推入编写单元测试输出通过来实现是比较优雅的姿势。 编写uniqueArray.js var Unique = { /** * 双重循环去重 * @param arr * @returns {*} */ ...
摘要:数组元素甚至可以是对象或其它数组。它执行的是浅拷贝,这意味着如果数组元素是对象,两个数组都指向相同的对象,对新数组中的对象修改,会在旧的数组的相同对象中反应出来。 JS中的数组是弱类型的,数组中可以含有不同类型的元素。数组元素甚至可以是对象或其它数组。JS引擎一般会优化数组,按索引访问数组常常比访问一般对象属性明显迅速。数组长度范围 from 0 to 4,294,967,295(2^...
阅读 1918·2023-04-25 23:43
阅读 1026·2021-11-24 09:39
阅读 803·2021-11-22 15:25
阅读 1801·2021-11-22 12:08
阅读 1189·2021-11-18 10:07
阅读 2188·2021-09-23 11:22
阅读 3449·2021-09-22 15:23
阅读 2743·2021-09-13 10:32