这里为大家详细讲解“高性能js数组去重(12种方法,史上最全)”的完整攻略。
1. 原始数组去重方法
原始数组去重方法是指使用两层循环遍历原始数组,逐个将元素与新数组中的元素作比较,如果新数组中没有相同的元素,就把该元素压入新数组。这种方法代码简单易懂,适合只有少量元素的数组去重。
代码如下:
function unique1(arr) {
var newArr = []; // 定义新数组
for (var i = 0; i < arr.length; i++) { // 循环原始数组
var flag = true; // 标记位
for (var j = 0; j < newArr.length; j++) { // 循环新数组
if (arr[i] === newArr[j]) { // 判断新数组是否已经包含该元素
flag = false; // 修改标记位
break; // 结束循环
}
}
if (flag) { // 如果标记位为true,说明新数组中没有该元素
newArr.push(arr[i]); // 将该元素压入新数组
}
}
return newArr; // 返回新数组
}
2. indexOf去重方法
indexOf去重方法是指将每个元素在原始数组中的位置与该元素在新数组中的位置作比较,如果相等,说明该元素已经被压入新数组,否则将该元素压入新数组。该方法代码简单,但对于大量元素的数组性能较差。
代码如下:
function unique2(arr) {
var newArr = []; // 定义新数组
for (var i = 0; i < arr.length; i++) { // 循环原始数组
if (newArr.indexOf(arr[i]) === -1) { // 判断该元素是否已经在新数组中存在
newArr.push(arr[i]); // 将该元素压入新数组
}
}
return newArr; // 返回新数组
}
3. 排序去重法
排序去重法是指先将原始数组进行排序,然后从前向后遍历数组,将不同的元素压入新数组。该方法对于大量元素的数组性能较好,但是会改变原始数组的顺序。
代码如下:
function unique3(arr) {
var newArr = []; // 定义新数组
arr.sort(); // 对原始数组进行排序
for (var i = 0; i < arr.length; i++) { // 循环原始数组
if (arr[i] !== arr[i + 1]) { // 判断该元素与下一个元素是否相等
newArr.push(arr[i]); // 将该元素压入新数组
}
}
return newArr; // 返回新数组
}
4. 对象键值对去重法
对象键值对去重法是指将原始数组的每个元素作为对象的键和值,将每个键值对作为新数组中对象的属性和值进行比较,如果对象中不存在该属性,就将该键值对添加到对象中,并将该元素压入新数组。该方法比较巧妙,并且性能较好。
代码如下:
function unique4(arr) {
var obj = {}, newArr = []; // 定义对象和新数组
for (var i = 0; i < arr.length; i++) { // 循环原始数组
if (!obj[arr[i]]) { // 判断该元素在对象中是否存在
obj[arr[i]] = true; // 在对象中添加该元素
newArr.push(arr[i]); // 将该元素压入新数组中
}
}
return newArr; // 返回新数组
}
以上是四种常规的js数组去重方法,仅供参考。
更多的高性能js数组去重方法,可以查看原文链接:https://www.cnblogs.com/snandy/p/5663586.html。文章中给出了12种不同的优化去重算法,同时也给出了性能比较和代码示例。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:高性能js数组去重(12种方法,史上最全) - Python技术站