导航:首页 > 使用方法 > 数组去重的四种常用方法

数组去重的四种常用方法

发布时间:2022-05-30 18:33:33

⑴ js数组如何去重

方法一:indexOf循环去重
方法二:ES6 Set去重;Array.from(new Set(array))
方法三:Object 键值对去重;把数组的值存成 Object 的 key 值,比如 Object[value1] = true,再判断另一个值的时候,如果 Object[value2]存在的话,就说明该值是重复的。

⑵ 数组去重的几种方法

js jquery去除数组中的重复元素
第一种:$.unique()
第二种:
for(var i = 0,len = totalArray_line.length;i < len;i++)
{
!RegExp(totalArray_line[i],"g").test(resultArray_line.join(",")) && (resultArray_line.push(totalArray_line[i]));
}

⑶ python 列表去重(数组)的几种方法

function clear(arr) {// 1 如何获取数组中每一个元素出现的次数var o = {}; // 1.1 记录数组中元素出现的次数for (var i = 0; i < arr.length; i++) {var item = arr[i]; // 数组中的每一个元素// o[item] = 1;// 1.2 判断o对象是否有当前遍历到的属性if (o[item]) {// 如果o[item] 存在,说明次数不为1o[item]++;} else {// 如果o[item] 不存在,说明是第一次出现o[item] = 1;}}// console.log(o); // 2 生成一个新的数组,存储不重复的元素var newArray = [];// 2.1 遍历对象o中的所有属性for (var key in o) {// 2.2 判断o对象中当前属性的值是否为 1 如果为1 说明不重复直接放到新数组中if (o[key] === 1) {newArray.push(key);} else {// o对象中当前属性 次数不为1 ,说明有重复的,如果有重复的话,只存储一次// 判断当前的newArray数组中是否已经有该元素 if (newArray.indexOf(key) === -1) {newArray.push(key);}}}return newArray;} var array = ['c', 'a', 'z', 'a', 'x', 'a'];var newArray = clear(array);console.log(newArray);

⑷ JS数组去重的几种常见方法

js 数组去重

1

注:应该也可以适用于 object数组,但是本人没有进行验证,贴出来仅供你参考

第一种是比较常规的方法思路:1.构建一个新的数组存放结果2.for循环中每次从原数组中取出一个元素,用这个元素循环与结果数组对比3.若结果数组中没有该元素,则存到结果数组中代码如下:

Array.prototype.unique1 = function(){ var res = [this[0]]; for(var i = 1; i < this.length; i++){ var repeat = false; for(var j = 0; j < res.length; j++){ if(this[i] == res[j]){ repeat = true; break; } } if(!repeat){ res.push(this[i]); } } return res;}var arr = [1, 'a', 'a', 'b', 'd', 'e', 'e', 1, 0]alert(arr.unique1());

第二种方法比上面的方法效率要高思路:1.先将原数组进行排序2.检查原数组中的第i个元素 与 结果数组中的最后一个元素是否相同,因为已经排序,所以重复元素会在相邻位置3.如果不相同,则将该元素存入结果数组中代码如下:

Array.prototype.unique2 = function(){ this.sort(); //先排序 var res = [this[0]]; for(var i = 1; i < this.length; i++){ if(this[i] !== res[res.length - 1]){ res.push(this[i]); } } return res;}var arr = [1, 'a', 'a', 'b', 'd', 'e', 'e', 1, 0]alert(arr.unique2());

二种方法也会有一定的局限性,因为在去重前进行了排序,所以最后返回的去重结果也是排序后的。如果要求不改变数组的顺序去重,那这种方法便不可取了。第三种方法(推荐使用)思路:1.创建一个新的数组存放结果2.创建一个空对象3.for循环时,每次取出一个元素与对象进行对比,如果这个元素不重复,则把它存放到结果数组中,同时把这个元素的内容作为对象的一个属性,并赋值为1,存入到第2步建立的对象中。说明:至于如何对比,就是每次从原数组中取出一个元素,然后到对象中去访问这个属性,如果能访问到值,则说明重复。代码如下:

Array.prototype.unique3 = function(){ var res = []; var json = {}; for(var i = 0; i < this.length; i++){ if(!json[this[i]]){ res.push(this[i]); json[this[i]] = 1; } } return res;}var arr = [112,112,34,'你好',112,112,34,'你好','str','str1'];alert(arr.unique3());

⑸ 有序数组去重的几种算法

这个问题的意思是,如果假设一个数组中存在重复的数据项,那么就中保留重复数据项中的一个。也就是说最终输出的结果数组中不容许存在重复数据项,所以因为这里涉及到重复数据项的问题,所以立马想到了集合(Set)这个数据结构,因为它是不容序存在重复数据项的数据结构,
思路1.也就是将数组中的所有元素插入到一个Set中,利用Set的自动剔除重复数据项的功能,将导致所有重复数据项没有办法插入成功,也就是add方法
返回false,然后调用toArray方法,返回这个集合所对应的数组。那么这个数组就是一个没有重复数据项的数组,利用这个方法,通过比较结果数组和
源数组之间的大小,查看源数组中到底是否存在重复数据项。
思路2.除了利用Set这个数据结构不容序存在重复数据项的功能之外,还有一种很容易想到的方法,也就是对整个数组进行排序,然后遍历排序之后的数组,将重复数据项,清除掉。
思路1的实现:
public static int[] noDup(int[] array) {

Set<Integer> set = new
HashSet<Integer>();

for (int i :
array)

set.add(i);

Integer[]
integers = (Integer[]) set.toArray();

int[] result
= new int[integers.length];

for (int i =
0; i < integers.length; i++)

result[i] =
integers[i];

return
result;
}

思路2的实现:
使用快速排序等算法对数组进行排序,这个排序过程不在介绍。假设下面这个算法的输入是一个几经排好序的数组。
for (int i = 0; i < array.length - 1; i++) {

if (array[i]
== array[i + 1]) {

array[i] =
-1;

}

}
通过上面这段代码就能够实现把数组中所有的重复数据项只保留一个,其它的置为-1或者根据实际情况置成其它值。然后遍历数据,删除所有位-1的数据项,并且将数组中包含的记录个数不断减少即可。

⑹ JavaScript 数据去重的常用几种方法

写一个先:

functionclear(arr){
//1如何获取数组中每一个元素出现的次数
varo={};//1.1记录数组中元素出现的次数
for(vari=0;i<arr.length;i++){
varitem=arr[i];//数组中的每一个元素
//o[item]=1;
//1.2判断o对象是否有当前遍历到的属性
if(o[item]){
//如果o[item]存在,说明次数不为1
o[item]++;
}else{
//如果o[item]不存在,说明是第一次出现
o[item]=1;
}
}
//console.log(o);

//2生成一个新的数组,存储不重复的元素
varnewArray=[];
//2.1遍历对象o中的所有属性
for(varkeyino){
//2.2判断o对象中当前属性的值是否为1如果为1说明不重复直接放到新数组中
if(o[key]===1){
newArray.push(key);
}else{
//o对象中当前属性次数不为1,说明有重复的,如果有重复的话,只存储一次
//判断当前的newArray数组中是否已经有该元素
if(newArray.indexOf(key)===-1){
newArray.push(key);
}
}
}
returnnewArray;
}

vararray=['c','a','z','a','x','a'];
varnewArray=clear(array);
console.log(newArray);

⑺ javascript怎样数组去重并排序.效率最快的

以下是我针对网上三种高效率方法总结与效率测试,如果大家有更好的意见或建议也可以提出,大家共勉学习。

数组去重法1:
Array.prototype.unique1 = function(){ console.time("数组去重法1"); //记录开始执行的时间 var arr = []; //创建一个临时数组 var obj = {}; //创建一个空对象 for(var i = 0; i < this.length; i++){ //遍历当前要去重的数组 if(!obj[this[i]]){ //判断obj对象中是否存有当前项,没有则执行 arr.push(this[i]); //将当前项push到临时数组中 obj[this[i]] = 1; //将当前项存入obj对象 } } console.timeEnd("数组去重法1"); //记录结束执行的时间 return arr; }
数组去重法2:
Array.prototype.unique2 = function(){ console.time("数组去重法2"); //记录开始执行的时间 var arr = []; //创建一个临时数组 for(var i = 0; i < this.length; i++){ //遍历当前要去重的数组 if(arr.indexOf(this[i]) == -1){ //判断临时数组中是否存有当前项,没有则执行 arr.push(this[i]); //将当前项push到临时数组中 } } console.timeEnd("数组去重法2"); //记录结束执行的时间 return arr; }
数组去重法3:
Array.prototype.unique3 = function(){ console.time("数组去重法3"); //记录开始执行的时间 var arr = [this[0]]; //创建一个临时数组,并将要去重数组的第一项存入临时数组 for(var i = 1; i < this.length; i++) { //从要去重数组第二项开始遍历 if (this.indexOf(this[i]) == i){ //判断临时数组中是否存有当前项,没有则执行 arr.push(this[i]); //将当前项push到临时数组中 } } console.timeEnd("数组去重法3"); //记录结束执行的时间 return arr; }
效率测试方法:
var arr1 = []; //创建一个要去重的数组 for(var i = 0; i < 200000; i++){ //遍历200000个数据 arr1.push(parseInt(Math.random() * 10) + 1); //将所有数据返回为随机数(1-10之间)的数, 并push到要去重的数组中 } console.log(arr1.unique1()); //打印数组去重法1的执行时间 console.log(arr1.unique2()); //打印数组去重法2的执行时间 console.log(arr1.unique3()); //打印数组去重法3的执行时间
效率测试结果:

总结

以上就是关于JavaScript几种数组去重的方法效率测试,希望测试的结果对大家选择使用数组去重方法能有所帮助,如果有疑问大家可以留言交流。谢谢大家对脚本之家的支持。

⑻ JS数组去重的几种方法

function clear(arr) {
// 1 如何获取数组中每一个元素出现的次数
var o = {}; // 1.1 记录数组中元素出现的次数
for (var i = 0; i < arr.length; i++) {
var item = arr[i]; // 数组中的每一个元素
// o[item] = 1;
// 1.2 判断o对象是否有当前遍历到的属性
if (o[item]) {
// 如果o[item] 存在,说明次数不为1
o[item]++;
} else {
// 如果o[item] 不存在,说明是第一次出现
o[item] = 1;
}
}
// console.log(o);

// 2 生成一个新的数组,存储不重复的元素
var newArray = [];
// 2.1 遍历对象o中的所有属性
for (var key in o) {
// 2.2 判断o对象中当前属性的值是否为 1 如果为1 说明不重复直接放到新数组中
if (o[key] === 1) {
newArray.push(key);
} else {
// o对象中当前属性 次数不为1 ,说明有重复的,如果有重复的话,只存储一次
// 判断当前的newArray数组中是否已经有该元素
if (newArray.indexOf(key) === -1) {
newArray.push(key);
}
}
}
return newArray;
}

var array = ['c', 'a', 'z', 'a', 'x', 'a'];
var newArray = clear(array);
console.log(newArray);

⑼ 数组去重的几种封装方法

具体代码就不给了,思路给你,先把list数组遍历到set数组,然后再把set数据遍历生成一个list数组,具体原理其实就是list数组是可以有重复元素的,但是set数组不能有重复元素,所以就可以去重复

阅读全文

与数组去重的四种常用方法相关的资料

热点内容
羽毛球空手训练方法 浏览:385
在云南种菜有哪些方法 浏览:99
前列腺增生是有哪些治疗方法 浏览:554
十种颈椎病治疗方法 浏览:454
单人训练模式开启方法 浏览:121
种植百合土壤消毒方法 浏览:736
化粪池两端连接方法 浏览:607
注册不了滴滴有什么方法吗 浏览:864
简单麻花的编织方法 浏览:165
倒立团身训练方法 浏览:725
特岗中教育学教学方法选用依据 浏览:556
治疗抑郁最好的方法 浏览:949
寻找八脉最简单的方法 浏览:773
地膜覆盖率计算方法 浏览:275
国内外教学方法改革方案 浏览:376
电脑快速补齐温湿度方法 浏览:178
血管炎的治疗方法 浏览:192
食用酒精勾兑白洒方法 浏览:504
检测nacl的方法 浏览:810
coolpad3G手机解锁方法 浏览:55