JavaScript常用数组去重的方法及对比详解
在JavaScript开发中,常常需要对数组进行去重操作。本文将详细介绍JavaScript常用的数组去重方法,并对它们进行比较和详细解释。
一、方法1:双重循环去重法
方法描述
通过双重循环遍历数组,把数组中的每个元素依次与之后的每个元素相比较,如果发现重复的元素,则把后面的元素从数组中删除。
示例代码
function unique(arr) {
for (var i = 0; i < arr.length; i++) {
for (var j = i + 1; j < arr.length; j++) {
if (arr[i] === arr[j]) {
arr.splice(j, 1);
j--;
}
}
}
return arr;
}
// 测试代码
var arr = [1, 2, 3, 3, 4, 5, 5, 6];
var result = unique(arr);
console.log(result); // [1, 2, 3, 4, 5, 6]
方法分析
该方法实现简单,但由于涉及到双重循环,时间复杂度较高,不适用于大型数组。
二、方法2:利用indexOf去重法
方法描述
通过indexOf函数检查每个值是否已经在新数组中出现过,如果没有出现过,则将其加入新数组中。
示例代码
function unique(arr) {
var newArr = [];
for (var i = 0; i < arr.length; i++) {
if (newArr.indexOf(arr[i]) === -1) {
newArr.push(arr[i]);
}
}
return newArr;
}
// 测试代码
var arr = [1, 2, 3, 3, 4, 5, 5, 6];
var result = unique(arr);
console.log(result); // [1, 2, 3, 4, 5, 6]
方法分析
该方法是一种较为简单的去重方法,并且时间复杂度比双重循环去重法低,但在处理大型数组时,indexOf函数的性能问题会显现出来。
三、方法3:利用ES6 Set去重法
方法描述
利用ES6中的Set数据结构中的元素唯一性,将数组转换为Set,再将Set转换为数组。
示例代码
function unique(arr) {
return Array.from(new Set(arr));
}
// 测试代码
var arr = [1, 2, 3, 3, 4, 5, 5, 6];
var result = unique(arr);
console.log(result); // [1, 2, 3, 4, 5, 6]
方法分析
该方法使用了ES6语法,代码简单易懂,并且时间复杂度较低,是一种比较常用的数组去重方法。
四、方法4:利用Object对象属性去重法
方法描述
通过建立一个新的Object对象,遍历原数组中的每个元素作为对象属性名并赋值为1,当再次出现该属性名时,将其删除。
示例代码
function unique(arr) {
var obj = {};
return arr.filter(function(item, index, arr) {
return obj.hasOwnProperty(typeof item + item)
? false
: (obj[typeof item + item] = true);
});
}
// 测试代码
var arr = [1, 2, 3, 3, 4, 5, 5, 6];
var result = unique(arr);
console.log(result); // [1, 2, 3, 4, 5, 6]
方法分析
该方法利用了对象属性名不重复的特性,时间复杂度较低,但是当原数组中的元素是对象时,该方法就不适用了。
五、方法5:利用哈希表去重法
方法描述
建立一个新的哈希表,遍历原数组中的每个元素,在哈希表中寻找该元素,如果找到,则说明该元素重复,将其删除。如果未找到,则说明该元素不重复,将其加入哈希表中。
示例代码
function unique(arr) {
var hashMap = {},
newArr = [];
for (var i = 0; i < arr.length; i++) {
if (!hashMap[typeof arr[i] + arr[i]]) {
hashMap[typeof arr[i] + arr[i]] = true;
newArr.push(arr[i]);
}
}
return newArr;
}
// 测试代码
var arr = [1, 2, 3, 3, 4, 5, 5, 6];
var result = unique(arr);
console.log(result); // [1, 2, 3, 4, 5, 6]
方法分析
该方法实现简单,时间复杂度较低,是一种常用的数组去重方法。
结语
本文介绍了JavaScript常用的5种数组去重方法,其中对比了它们的优缺点。在实际开发中,我们可以根据具体情况选择不同的方法来完成操作。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript常用数组去重的方法及对比详解 - Python技术站