大家好,今天来介绍es6数组去重的方法(判断数组是否有重复数组去重的简单方法)的问题,以下是渲大师小编对此问题的归纳和整理,感兴趣的来一起看看吧!
ES6如何实现数组去重和重复元素统计
本篇备旅文章给大家带来的内容是关于ES6如何实现数组去重和重复元素统计,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
一、去重
这里利用到了ES6的Set结构不允许数据重复的特性
let arr1 = [1,1,2,3,1,2,4,2];
//先将数组转化为Set数据类型,然后再转回数组类型
let dedupeArr = Array.from(new Set(arr1));二、统计
let count = 0;
let obj = {}; //最终返回的数据
dedupeArr.forEach(i=>{
count = 0;
arr1.forEach(j=>腊清{
if(i===j) count++;
})
obj[i] = count;//键名为i(数组元素),仿局凳值为count(出现次数)
})三、遍历对象
for(let i = 0 in obj){
console.log(i+’:’+obj[i]);
}
// 数组元素:出现次数
// 1:3
// 2:3
// 3:1
// 4:1
判断数组是否有重复数组去重的简单方法
1.判断数组是否有重复,汪并拍并返回重复的index
indexOf是从前向后查蔽晌询的index,lastIndexOf是从后向前查询的index,但是二者返回索引都是从前开始数数和计算的。
当有重复的时候两个值会不相等。
2.es6判断数组是否重复,不需要index的时候可以这样做
3.es6数组去重方法
和上面很相似,newSet可以去重,from把set转成数组类型困羡。
数组去重
数组去重是一个经常会用到的方法,我写了一个测试模板,测枣漏试一下常见的数据去重的方法的性能搜岩喊
测试模板
1、Array.filter() + indexOf
方法思路:将两个数组拼接为一个数组,然后使用 ES6 中的 Array.filter() 遍历数组,并结世野合 indexOf 来排除重复项
2、双重 for 循环
方法思路:外层循环遍历元素,内层循环检查是否重复,当有重复值的时候,可以使用 push(),也可以使用 splice()
3、for…of + includes()
方法思路:双重for循环的升级版,外层用 for…of 语句替换 for 循环,把内层循环改为 includes()。先创建一个空数组,当 includes() 返回 false 的时候,就将该元素 push 到空数组中 。类似的,还可以用 indexOf() 来替代 includes()
4、Array.sort()
方法思路:首先使用 sort() 将数组进行排序,然后比较相邻元素是否相等,从而排除重复项
5、new Set()
ES6 新增了 Set 这一数据结构,类似于数组,但Set 的成员具有唯一性
6、for…of + Object
方法思路:首先创建一个空对象,然后用 for 循环遍历,利用对象的属性不会重复这一特性,校验数组元素是否重复
测试结果一目了然,几种方法的性能 6>5>4>3>1>2
js中数组去重方法总结
1.es6有了Set,可以通过成员唯数漏一性去重
2.使用数组对象的lastIndexOf()方法。
(关于lastIndexOf():( https://www.jianshu.com/p/d75886bc6c75 )
3.定义新数组,存入原数组第一个元素,卖毕拦再将原数组元素和新数组元素比较,不同的继续push到新数组。
4.splice()方法从数组中添加/删除重复值。
5.使用includes()方法{ps:可搭配foreach()方法filter()方法;}。
6.采用indexOf()获取索引查询去重
7.利用对象属性存在与中胡否判断,这个方法没什么意思,但是也可行
去重的方法(数组、字符串)
数组去重
(1)
思路:利用一个函数中for遍历查找出重复元素,有则返回turn,如果全部备遍历完后没则返回false
利用另一个函数判断上一个返回的值
方法:
//去重
//遍历一遍找出重复元素
//方法是键此瞎:将新数组与原数组进行对比,第一次出现就添加到稿空新数组里,否则就不扒陪进行操作。
function has(arra,val){//是否有重复的数值,存在返回turn,否则false
for(let i=0,len=arra.length;i<len;i++){
if(arra[i]===val)//存在
return true;
}
return false;
}
function strOne(array){
var newArray = [];
for(var i in array){
if(!has(newArray,array[i]))
newArray.push(array[i]);
}
return newArray;
}
console.log(strOne(arr));
(2)(es6新增)
方法:
function dedupe(array){
return Array.from(new Set(array));
}
console.log(dedupe(arr));
(3)
方法:
function de_weight (array){
var newArray = [];
for(let i=0,len=array.length;i<len;i++){
for(let j=i+1;j<len;j++){
if(array[i]===array[j])
j=++i;
}
newArray.push(array[i]);
}
return newArray;
}
(4)
方法:
//利用对象来给数组去重
var arr = [12,1,1,12,45,2,3,45,5,6,7,89,9,9,89,1,1,1];
var conet = {};
for(let i=0,len=arr.length;i<len;i++){
conet[arr[i]] = arr[i];
}
console.log(Object.values(conet));
字符串去重:
(1)
var str = “dwqewdfsafdfwqewdsadsa”;
var strArray = [],newArray=[];
console.log(str.charAt(4));
console.log(str.length);
for(let i=0,len=str.length;i<len;i++){
strArray[i] = str.charAt(i);
}
console.log(strArray);
for(let i=0,len=strArray.length;i<len;i++){
for(let j=i+1;j<len;j++){
if(strArray[i]===strArray[j]){
j=++i;
}
}
newArray.push(strArray[i]);
}
console.log(newArray);
str = “”;
for(let i=0,len=newArray.length;i<len;i++){
str += newArray[i];
}
console.log(str);
(2)
/
*思路:对象不会获取相同的属性,从而将属性与属性值对应,拿出属性值,组成新的数组
*/
var str = “dwqewdfsafdfwqewdsadsa”;
var conet ={};
for(let i=0,len=str.length;i<len;i++){
conet[str.charAt(i)] = str.charAt(i);
}
let string = Object.values(conet);//获取对象里的对应的值
console.log(typeof string);
console.log(string);
string = string.join(“”);//将数组对象转换变成字符串
console.log(string);