JavaScript中的数组去重是一个比较常用的操作,本文将介绍几种常用的JavaScript数组去重方法,包括传统for循环、ES6 Set、Array.filter()、Array.reduce()和ES6 Map。
传统for循环
最常见的去重方法就是使用传统的for循环,基本思路是:遍历数组,将每一个元素与数组的其它元素进行比较,如果有重复的就将其删除。
function unique(arr) {
var result = [];
for (var i = 0, len = arr.length; i < len; i++) {
if (result.indexOf(arr[i]) === -1) {
result.push(arr[i]);
}
}
return result;
}
var arr = [1, 2, 3, 2, 1];
console.log(unique(arr)); //[1, 2, 3]
上述代码中,我们定义了一个unique()函数,来实现数组去重的功能。首先,我们定义了一个result数组,用来保存去重后的结果。接着,我们使用for循环来遍历原数组arr,通过result.indexOf(arr[i])来判断当前元素arr[i]是否在result数组中存在,如果不存在则将其添加到result数组中。最后,返回result数组即可。
ES6 Set
ES6中新增了Set数据类型,可以用来存储一些具有独特性质的数据。Set数据类型自动去重,可以用来实现数组去重。
function unique(arr) {
return Array.from(new Set(arr));
}
var arr = [1, 2, 3, 2, 1];
console.log(unique(arr)); //[1, 2, 3]
上述代码中,我们使用了Set和Array.from()方法来实现数组去重。首先,我们将原数组arr传入Set方法中,得到一个去重后的Set数据类型。接着,我们使用Array.from()方法将Set类型转为数组类型。最后,返回数组即可。
Array.filter()
使用Array.filter()方法可以筛选出一个新的数组,根据新数组的长度是否等于原数组长度,可以判断原数组中是否有重复元素。
function unique(arr) {
return arr.filter(function(item, index, array) {
return array.indexOf(item) === index;
});
}
var arr = [1, 2, 3, 2, 1];
console.log(unique(arr)); //[1, 2, 3]
上述代码中,我们使用了Array.filter()方法来实现数组去重。filter()方法将数组中的每一个元素都传入回调函数中,item为当前元素,index为当前元素的下标,array为原始数组。我们使用array.indexOf(item) === index来判断当前元素在数组中是否是第一个出现的位置,如果是则保留,否则删除。最后返回筛选出的新数组即可。
Array.reduce()
使用Array.reduce()方法也可以实现数组去重,思路类似于for循环。
function unique(arr) {
return arr.reduce(function(prev, curr) {
if (prev.indexOf(curr) === -1) {
prev.push(curr);
}
return prev;
}, []);
}
var arr = [1, 2, 3, 2, 1];
console.log(unique(arr)); //[1, 2, 3]
上述代码中,我们使用了Array.reduce()方法来实现数组去重。reduce()方法将数组中的每一个元素都传入回调函数中,prev为上一次回调函数的返回值,curr为当前元素。我们使用if语句来判断当前元素是否在prev数组中存在,如果不存在则将其添加到prev数组中。最后返回prev数组即可。
ES6 Map
ES6中的Map数据类型也可以实现数组去重。使用Map数据类型时,我们可以将数组中的每一个元素作为key存入Map,value设置为1,然后取出Map中的keys即可得到去重后的数组。
function unique(arr) {
var map = new Map();
var result = [];
for (var i = 0, len = arr.length; i < len; i++) {
if (!map.has(arr[i])) {
map.set(arr[i], 1);
result.push(arr[i]);
}
}
return result;
}
var arr = [1, 2, 3, 2, 1];
console.log(unique(arr)); //[1, 2, 3]
上述代码中,我们使用了Map数据类型来实现数组去重。我们首先定义了一个空的Map类型,用来保存去重后的结果。接着,我们使用for循环遍历原始数组arr,使用if语句判断当前元素是否在Map中存在。如果Map中不存在该元素,则将该元素作为key存入Map,value为1;同时将该元素添加到result数组中。最后返回result数组即可。
以上是我分享的几种JavaScript数组去重的方法,你阅读之后对数组去重应该有更全面的了解了。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript数组去重的几种方法 - Python技术站