EXCEL中一维数组如何去重?Js数组去重的几种方法总结

EXCEL中一维数组如何去重?Js数组去重的几种方法总结

本文目录

  • EXCEL中一维数组如何去重
  • Js数组去重的几种方法总结
  • JS数组去重的几种常见方法
  • js数组如何去重
  • javascript怎样数组去重并排序.效率最快的
  • js中数组去重的几种方法
  • 有序数组去重的几种算法
  • java中数组怎么删除数组中重复的数
  • java删除数组中重复的数
  • JAVA如何去除数组中每个元素中重复的内容

EXCEL中一维数组如何去重


Excel中的所谓一维数组是指1列或1行数据,如:

A1:A4中分别是:重庆;金华;金华;杭州

A1:D1中分别是:重庆,金华,金华,杭州

所形成的数组就是一维数组,注意上面的分隔符,同一行中不同单元格之间的数据的分隔符是逗号,而同一列中的分隔符是分号。

如果一个单元格中出现了这些城市,中间用-分隔,那还只是一个基本的单元格,不是数组。

如果是一个单元格(如A1中)的数据要根据分隔符去除重复的内容,可用公式:

    =TEXTJOIN(“-“,,IF(FREQUENCY(COLUMN(A:Y),MATCH(TRIM(MID(SUBSTITUTE(A1,“-“,REPT(“ “,99)),COLUMN(A:Y)*99-98,99)),TRIM(MID(SUBSTITUTE(A1,“-“,REPT(“ “,99)),COLUMN(A:Y)*99-98,99)),)),TRANSPOSE(TRIM(MID(SUBSTITUTE(A1,“-“,REPT(“ “,99)),COLUMN(A:Z)*99-98,99))),““))

同时按Ctrl+Shift+Enter三键输入数组公式

如果真是一维数组去重,那就要简单得多了。


Js数组去重的几种方法总结


把数组放在Set内,就去重了,下面是示例代码:

const items = new Set([1, 2, 3, 4, 5, 3, 4, 5]);
const array = Array.from(items);
console.log(array);

要不然就是循环遍历数组,去重数据


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


js 数组去重
1
注:应该也可以适用于 object数组,但是本人没有进行验证,贴出来仅供你参考
第一种是比较常规的方法思路:1.构建一个新的数组存放结果2.for循环中每次从原数组中取出一个元素,用这个元素循环与结果数组对比3.若结果数组中没有该元素,则存到结果数组中代码如下:
Array.prototype.unique1 = function(){ var res = [this]; 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]; 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());

js数组如何去重


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

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]; //创建一个临时数组,并将要去重数组的第一项存入临时数组 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);

有序数组去重的几种算法


这个问题的意思是,如果假设一个数组中存在重复的数据项,那么就中保留重复数据项中的一个。也就是说最终输出的结果数组中不容许存在重复数据项,所以因为这里涉及到重复数据项的问题,所以立马想到了集合(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的数据项,并且将数组中包含的记录个数不断减少即可。

java中数组怎么删除数组中重复的数


通过HashSet剔除
    // 删除ArrayList中重复元素,add进去顺序就变了不考虑顺序的话可以使用
    public static void removeDuplicate1(List list) {
        HashSet h = new HashSet(list);
        list.clear();
        list.addAll(h);
        System.out.println(list);
    }

java删除数组中重复的数


最直接的方式, 用嵌套循环, 从数组第一个元素开始与该元素之后的所有元素比较, 如果发现相同的,则删除后者
这是方法:
for (i=0; i 《 数组长度; i++)
{
int temp = 元素[i];
for (int j = i +1; j 《 数组长度; j++)
{
if (temp == 元素[j])
删除元素[j];
}
}

JAVA如何去除数组中每个元素中重复的内容


java数组中去掉重复数据可以使用set集合,set本身内部是不保存重复的数据的,如下代码:

 
import java.util.Arrays;import java.util.Set;import java.util.TreeSet; public class ceshi {    public static void main(String args) {         int testArr = { 5, 5, 1, 2, 3, 6, -7, 8, 6, 45, 5 };//新建一个int类型数组        System.out.println(Arrays.toString(testArr));        Set《Integer》 set = new TreeSet《Integer》();//新建一个set集合        for (int i : testArr) {            set.add(i);        }        Integer arr2 = set.toArray(new Integer);        // 数组的包装类型不能转 只能自己转;吧Integer转为为int数组;        int result = new int[arr2.length];        for (int i = 0; i 《 result.length; i++) {            result[i] = arr2[i];        }        System.out.println(Arrays.toString(arr2));    }}

运行结果如下:


推荐阅读